<Swing Dev> Swing and imageio-related types that are candidates to be FunctionalInterfaces in JDK 8
Alexander Scherbatiy
alexandr.scherbatiy at oracle.com
Tue Feb 12 12:56:30 UTC 2013
Lambda is a new feature in Open JDK 8. Could you give some
explanation about Lambda and FunctionalInterface annotation usage in
AWT/Swing?
Here are some statements that can be correct or not (I am not an
expert in JDK lambda):
1. It is good practice to use Lambda for the AWT/Swing listeners:
button.addActionListener(e -> ui.dazzle(e.getModifiers()));
http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html
2. Adding FunctionalInterface annotation allows the compiler to
check that the interface has only one abstract method.
However, all works in the same way if an interface does not have
the FunctionalInterface annotation.
3. Users should care about Swing classes usage in Lambda methods
invoked in in parallel because Swing classes should be updated from ETD.
May be something else that could give better understanding of the
Lambda features usage in AWT/Swing and how Swing should be adopted for
the Lambda?
Thanks,
Alexandr.
On 2/12/2013 4:31 AM, Joseph Darcy wrote:
> And to be clear, my expectation is that the swing team will carry
> through on the remainder of the work need to add the annotation to
> appropriate swing types.
>
> -Joe
>
> On 2/11/2013 2:23 PM, Brian Goetz wrote:
>> There is no automagic use of parallelism as part of either the Lambda
>> language features or new libraries. All parallelism is explicit
>> (though unobtrusive). So I think this comment optimizes down to "" :)
>>
>> On 2/11/2013 5:21 PM, Phil Race wrote:
>>> Joe,
>>>
>>> Note that Swing is a single threaded API. You can't update the UI from
>>> any thread other than the EDT.
>>> Where any automatic usage of processing in parallel from additional
>>> threads
>>> is performed by the lambda implementation it will violate that
>>> requirement.
>>> So you should be circumspect in tagging Swing classes.
>>>
>>> -phil.
>>>
>>> On 2/5/2013 2:41 PM, Joe Darcy wrote:
>>>> Hello,
>>>>
>>>> As part of Project Lambda, a FunctionalInterface annotation type was
>>>> added to the platform to mark interfaces that are intended to be used
>>>> in lambda expressions. I've sent out a code review request to add
>>>> this annotation to types in the core-libs area [1].
>>>>
>>>> To assist the swing team in adding analogous annotations to your
>>>> types, the list of candidate types in for swing and imageio-related
>>>> classes in java.* and javax.* is given below. I recommend sub-tasks
>>>> of JDK-8005297 "Add FunctionalInterface support to the platform" be
>>>> used to track the work of adding @FunctionalInterface annotations to
>>>> swing types.
>>>>
>>>> Thanks,
>>>>
>>>> -Joe
>>>>
>>>> [1]
>>>> http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-February/014292.html
>>>>
>>>>
>>>>
>>>> jdk/src/share/classes/javax/print/FlavorException.java:39: Note:
>>>> Candidate functional interface
>>>> public interface FlavorException {
>>>> ^
>>>> jdk/src/share/classes/javax/print/event/PrintServiceAttributeListener.java:37:
>>>>
>>>> Note: Candidate functional interface
>>>> public interface PrintServiceAttributeListener {
>>>> ^
>>>> jdk/src/share/classes/javax/print/event/PrintJobAttributeListener.java:34:
>>>>
>>>> Note: Candidate functional interface
>>>> public interface PrintJobAttributeListener {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/TransferHandler.java:128: Note:
>>>> Candidate functional interface
>>>> interface HasGetTransferHandler {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/tree/TreeCellRenderer.java:42: Note:
>>>> Candidate functional interface
>>>> public interface TreeCellRenderer {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/tree/RowMapper.java:36: Note:
>>>> Candidate functional interface
>>>> public interface RowMapper
>>>> ^
>>>> jdk/src/share/classes/javax/swing/table/TableCellRenderer.java:38:
>>>> Note: Candidate functional interface
>>>> public interface TableCellRenderer {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/event/ChangeListener.java:36: Note:
>>>> Candidate functional interface
>>>> public interface ChangeListener extends EventListener {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/event/HyperlinkListener.java:35:
>>>> Note: Candidate functional interface
>>>> public interface HyperlinkListener extends EventListener {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/event/RowSorterListener.java:34:
>>>> Note: Candidate functional interface
>>>> public interface RowSorterListener extends java.util.EventListener {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/event/CaretListener.java:36: Note:
>>>> Candidate functional interface
>>>> public interface CaretListener extends EventListener {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/event/ListSelectionListener.java:41:
>>>> Note: Candidate functional interface
>>>> public interface ListSelectionListener extends EventListener
>>>> ^
>>>> jdk/src/share/classes/javax/swing/event/UndoableEditListener.java:37:
>>>> Note: Candidate functional interface
>>>> public interface UndoableEditListener extends
>>>> java.util.EventListener {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/event/TableModelListener.java:38:
>>>> Note: Candidate functional interface
>>>> public interface TableModelListener extends java.util.EventListener
>>>> ^
>>>> jdk/src/share/classes/javax/swing/event/TreeSelectionListener.java:43:
>>>> Note: Candidate functional interface
>>>> public interface TreeSelectionListener extends EventListener
>>>> ^
>>>> jdk/src/share/classes/javax/swing/ListCellRenderer.java:89: Note:
>>>> Candidate functional interface
>>>> public interface ListCellRenderer<E>
>>>> ^
>>>> jdk/src/share/classes/javax/swing/text/html/CSSBorder.java:257: Note:
>>>> Candidate functional interface
>>>> interface BorderPainter {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/text/html/Map.java:234: Note:
>>>> Candidate functional interface
>>>> interface RegionContainment {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/text/TabExpander.java:34: Note:
>>>> Candidate functional interface
>>>> public interface TabExpander {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/text/ViewFactory.java:36: Note:
>>>> Candidate functional interface
>>>> public interface ViewFactory {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/text/Position.java:49: Note:
>>>> Candidate functional interface
>>>> public interface Position {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/text/Highlighter.java:112: Note:
>>>> Candidate functional interface
>>>> public interface HighlightPainter {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/Painter.java:63: Note: Candidate
>>>> functional interface
>>>> public interface Painter<T> {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/plaf/basic/DragRecognitionSupport.java:52:
>>>>
>>>> Note: Candidate functional interface
>>>> public static interface BeforeDrag {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/UIDefaults.java:951: Note: Candidate
>>>> functional interface
>>>> public interface LazyValue {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/UIDefaults.java:984: Note: Candidate
>>>> functional interface
>>>> public interface ActiveValue {
>>>> ^
>>>> jdk/src/share/classes/javax/swing/JComboBox.java:1484: Note: Candidate
>>>> functional interface
>>>> public interface KeySelectionManager {
>>>> ^
>>>> jdk/src/share/classes/javax/imageio/IIOParamController.java:99: Note:
>>>> Candidate functional interface
>>>> public interface IIOParamController {
>>>> ^
>>>> jdk/src/share/classes/javax/imageio/event/IIOWriteWarningListener.java:46:
>>>>
>>>> Note: Candidate functional interface
>>>> public interface IIOWriteWarningListener extends EventListener {
>>>> ^
>>>> jdk/src/share/classes/javax/imageio/event/IIOReadWarningListener.java:46:
>>>>
>>>> Note: Candidate functional interface
>>>> public interface IIOReadWarningListener extends EventListener {
>>>> ^
>>>> jdk/src/share/classes/javax/imageio/metadata/IIOMetadataController.java:67:
>>>>
>>>> Note: Candidate functional interface
>>>> public interface IIOMetadataController {
>>>> ^
>>>> jdk/src/share/classes/javax/imageio/spi/ServiceRegistry.java:464:
>>>> Note: Candidate functional interface
>>>> public interface Filter {
>>>
>
More information about the swing-dev
mailing list