On Aug 23, 2013, at 1:36 PM, Alexander Scherbatiy <alexandr.scherba...@oracle.com> wrote:
> > Hello, > > Could you review the fix: > bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8007716 > webrev: http://cr.openjdk.java.net/~alexsch/8007716/webrev.00 > > There is the suggested functional interface candidates list in the > issue description. > I selected only listeners and Acive/Lazy values. > > However, I am not sure that listeners are good candidates for the > functional interface annotation > because there will be mix in the code that MouseWheelListener can be > used as functional interface and MouseMotionListener not. > I suspect many implementations of these interfaces are likely to hold state and/or have side-effects. In that respect they are like java.util.function.Consumer: /** * Represents an operation that accepts a single input argument and returns no * result. Unlike most other functional interfaces, {@code Consumer} is expected * to operate via side-effects. * * <p>This is a <a href="package-summary.html">functional interface</a> * whose functional method is {@link #accept(Object)}. * * @param <T> the type of the input to the operation * * @since 1.8 */ @FunctionalInterface public interface Consumer<T> { My view is if it looks and quacks like a functional interface stick a @FunctionaInterface on it, regardless of whether other related interfaces cannot, such as MouseMotionListener since it has two abstract methods. So in general i think the listeners are a good category. I tend to agree with your categorisation below, although i am not very familiar with Swing, and of course that does not mean lambda expressions or method references cannot be used with non-annotated interfaces. Paul. > ------------------------------ > The FunctionalInterface annotation has been added for the following > interfaces in the fix: > > 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/text/ViewFactory.java:36: Note: > Candidate functional interface > public interface ViewFactory { > > 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 { > > ------------------------------ > The FunctionalInterface annotation has not been added for the following > interfaces in the fix > because they mostly designed for the UI components painting rather to > use as single action or function calculation: > > 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/ListCellRenderer.java:89: Note: > Candidate functional interface > public interface ListCellRenderer<E> > > jdk/src/share/classes/javax/swing/text/TabExpander.java:34: Note: > Candidate functional interface > public interface TabExpander { > > 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/JComboBox.java:1484: Note: > Candidate functional interface > public interface KeySelectionManager { > > ------------------------------ > The FunctionalInterface annotation has not been added for the following > interfaces in the fix > because they are not public and so are not part of the public API: > > jdk/src/share/classes/javax/swing/TransferHandler.java:128: Note: > Candidate functional interface > interface HasGetTransferHandler { > > 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/plaf/basic/DragRecognitionSupport.java:52: > Note: Candidate functional interface > class DragRecognitionSupport { > public static interface BeforeDrag { > > > Thanks, > Alexandr. > >
signature.asc
Description: Message signed with OpenPGP using GPGMail