Looks fine to me. Mike
On Feb 5 2013, at 14:16 , Joe Darcy wrote: > Hello, > > As a follow-up to adding the FunctionalInterface annotation type to the > platform, the time has come to annotate JDK classes with the annotation. > > I ran an annotation processor over the sources in the jdk repo to look for > candidates to be marked as FunctionalInterfaces and for a first cut I have > added the annotation to 34 types, including all of the types in > java.util.function: > > src/share/classes/java/io/Closeable.java > src/share/classes/java/io/FileFilter.java > src/share/classes/java/io/FilenameFilter.java > src/share/classes/java/io/Flushable.java > src/share/classes/java/lang/AutoCloseable.java > src/share/classes/java/lang/Comparable.java > src/share/classes/java/lang/Iterable.java > src/share/classes/java/lang/Readable.java > src/share/classes/java/lang/Runnable.java > src/share/classes/java/lang/Thread.java > src/share/classes/java/util/Comparator.java > src/share/classes/java/util/function/BinaryOperator.java > src/share/classes/java/util/function/Block.java > src/share/classes/java/util/function/DoubleBinaryOperator.java > src/share/classes/java/util/function/DoubleBlock.java > src/share/classes/java/util/function/DoubleFunction.java > src/share/classes/java/util/function/DoubleSupplier.java > src/share/classes/java/util/function/DoubleUnaryOperator.java > src/share/classes/java/util/function/Function.java > src/share/classes/java/util/function/IntBinaryOperator.java > src/share/classes/java/util/function/IntBlock.java > src/share/classes/java/util/function/IntFunction.java > src/share/classes/java/util/function/IntSupplier.java > src/share/classes/java/util/function/IntUnaryOperator.java > src/share/classes/java/util/function/LongBinaryOperator.java > src/share/classes/java/util/function/LongBlock.java > src/share/classes/java/util/function/LongFunction.java > src/share/classes/java/util/function/LongSupplier.java > src/share/classes/java/util/function/LongUnaryOperator.java > src/share/classes/java/util/function/Predicate.java > src/share/classes/java/util/function/Supplier.java > src/share/classes/java/util/function/UnaryOperator.java > src/share/classes/java/util/logging/Filter.java > src/share/classes/java/util/prefs/PreferenceChangeListener.java > > Webrev: > http://cr.openjdk.java.net/~darcy/8005623.0/ > > This review is both to cover the addition of @FunctionalInterface to the > types above and also to query if the annotation should be included in any of > the other types below under the same bug. The sub-areas I have not annotated > yet include: > > * xml > * jdbc > * JSR 310 > * JNDI > * RMI > * Beans > * networking > * JMX/management > * java.util.concurrent > > The annotation can be added in these areas separately later as well; if that > is done, I recommend sub-tasks of JDK-8005297 "Add FunctionalInterface > support to the platform" be used to track the work. > > I'll separately be sending email to the security and awt/swing teams about > the functional interface candidates in their areas. > > Thanks, > > -Joe > > misc core > ======== > > jdk/src/share/classes/java/lang/annotation/Annotation.java:40: Note: > Candidate functional interface > public interface Annotation { > ^ > jdk/src/share/classes/java/io/ObjectInputValidation.java:38: Note: Candidate > functional interface > public interface ObjectInputValidation { > ^ > jdk/src/share/classes/java/util/ResourceBundle.java:690: Note: Candidate > functional interface > private static interface CacheKeyReference { > ^ > jdk/src/share/classes/java/util/spi/ResourceBundleControlProvider.java:51: > Note: Candidate functional interface > public interface ResourceBundleControlProvider { > ^ > jdk/src/share/classes/java/util/Formattable.java:119: Note: Candidate > functional interface > public interface Formattable { > ^ > jdk/src/share/classes/java/util/Observer.java:35: Note: Candidate functional > interface > public interface Observer { > ^ > jdk/src/share/classes/java/nio/file/WatchEvent.java:76: Note: Candidate > functional interface > public static interface Modifier { > ^ > jdk/src/share/classes/java/nio/file/attribute/AttributeView.java:38: Note: > Candidate functional interface > public interface AttributeView { > ^ > jdk/src/share/classes/java/nio/file/attribute/FileStoreAttributeView.java:35: > Note: Candidate functional interface > public interface FileStoreAttributeView > ^ > jdk/src/share/classes/java/nio/file/attribute/FileAttributeView.java:39: > Note: Candidate functional interface > public interface FileAttributeView > ^ > jdk/src/share/classes/java/nio/file/attribute/UserPrincipal.java:54: Note: > Candidate functional interface > public interface UserPrincipal extends Principal { } > ^ > jdk/src/share/classes/java/nio/file/attribute/GroupPrincipal.java:42: Note: > Candidate functional interface > public interface GroupPrincipal extends UserPrincipal { } > ^ > jdk/src/share/classes/java/nio/file/PathMatcher.java:38: Note: Candidate > functional interface > public interface PathMatcher { > ^ > jdk/src/share/classes/java/nio/file/DirectoryStream.java:133: Note: Candidate > functional interface > public static interface Filter<T> { > ^ > jdk/src/share/classes/javax/accessibility/Accessible.java:39: Note: Candidate > functional interface > public interface Accessible { > ^ > > jdk/src/share/classes/org/jcp/xml/dsig/internal/dom/ApacheData.java:37: Note: > Candidate functional interface > public interface ApacheData extends Data { > > reflection > ============= > > jdk/src/share/classes/java/lang/reflect/GenericArrayType.java:33: Note: > Candidate functional interface > public interface GenericArrayType extends Type { > ^ > > jdk/src/share/classes/java/lang/reflect/GenericDeclaration.java:33: Note: > Candidate functional interface > public interface GenericDeclaration { > ^ > jdk/src/share/classes/java/lang/reflect/InvocationHandler.java:41: Note: > Candidate functional interface > public interface InvocationHandler { > ^ > > > xml > ===== > > jdk/src/share/classes/javax/xml/crypto/KeySelectorResult.java:46: Note: > Candidate functional interface > public interface KeySelectorResult { > ^ > jdk/src/share/classes/javax/xml/crypto/URIDereferencer.java:55: Note: > Candidate functional interface > public interface URIDereferencer { > ^ > jdk/src/share/classes/javax/xml/crypto/NodeSetData.java:42: Note: Candidate > functional interface > public interface NodeSetData extends Data { > ^ > jdk/src/share/classes/javax/xml/crypto/XMLStructure.java:39: Note: Candidate > functional interface > public interface XMLStructure { > ^ > > JDBC - Assuming this will be handled separately under JDBC maintenance > ====== > > jdk/src/share/classes/java/sql/RowId.java:63: Note: Candidate functional > interface > public interface RowId { > ^ > jdk/src/share/classes/javax/sql/RowSetReader.java:41: Note: Candidate > functional interface > public interface RowSetReader { > ^ > jdk/src/share/classes/javax/sql/RowSetWriter.java:49: Note: Candidate > functional interface > public interface RowSetWriter { > ^ > JSR 310 - Assuming this will be handled separately under JSR 310 evolution > ========= > > jdk/src/share/classes/java/time/temporal/TemporalAdjuster.java:96: Note: > Candidate functional interface > public interface TemporalAdjuster { > ^ > jdk/src/share/classes/java/time/temporal/TemporalQuery.java:101: Note: > Candidate functional interface > public interface TemporalQuery<R> { > ^ > jdk/src/share/classes/java/time/temporal/TemporalAdder.java:95: Note: > Candidate functional interface > public interface TemporalAdder { > ^ > jdk/src/share/classes/java/time/temporal/TemporalSubtractor.java:95: Note: > Candidate functional interface > public interface TemporalSubtractor { > ^ > > JNDI > ====== > > jdk/src/share/classes/javax/naming/event/NamingListener.java:57: Note: > Candidate functional interface > public interface NamingListener extends java.util.EventListener { > ^ > jdk/src/share/classes/javax/naming/ldap/HasControls.java:60: Note: Candidate > functional interface > public interface HasControls { > ^ > jdk/src/share/classes/javax/naming/Referenceable.java:49: Note: Candidate > functional interface > public interface Referenceable { > ^ > jdk/src/share/classes/javax/naming/NameParser.java:45: Note: Candidate > functional interface > public interface NameParser { > ^ > jdk/src/share/classes/javax/naming/spi/StateFactory.java:80: Note: Candidate > functional interface > public interface StateFactory { > ^ > jdk/src/share/classes/javax/naming/spi/ObjectFactoryBuilder.java:57: Note: > Candidate functional interface > public interface ObjectFactoryBuilder { > ^ > jdk/src/share/classes/javax/naming/spi/ObjectFactory.java:70: Note: Candidate > functional interface > public interface ObjectFactory { > ^ > jdk/src/share/classes/javax/naming/spi/InitialContextFactoryBuilder.java:54: > Note: Candidate functional interface > public interface InitialContextFactoryBuilder { > ^ > jdk/src/share/classes/javax/naming/spi/InitialContextFactory.java:53: Note: > Candidate functional interface > public interface InitialContextFactory { > ^ > > RMI > ===== > > jdk/src/share/classes/java/rmi/activation/ActivationInstantiator.java:42: > Note: Candidate functional interface > public interface ActivationInstantiator extends Remote { > ^ > jdk/src/share/classes/java/rmi/activation/Activator.java:64: Note: Candidate > functional interface > public interface Activator extends Remote { > ^ > jdk/src/share/classes/java/rmi/server/RMIServerSocketFactory.java:61: Note: > Candidate functional interface > public interface RMIServerSocketFactory { > ^ > jdk/src/share/classes/java/rmi/server/RMIFailureHandler.java:40: Note: > Candidate functional interface > public interface RMIFailureHandler { > ^ > jdk/src/share/classes/java/rmi/server/RMIClientSocketFactory.java:62: Note: > Candidate functional interface > public interface RMIClientSocketFactory { > ^ > jdk/src/share/classes/java/rmi/server/Unreferenced.java:37: Note: Candidate > functional interface > public interface Unreferenced { > ^ > Beans > ======== > > jdk/src/share/classes/java/beans/PropertyChangeListener.java:34: Note: > Candidate functional interface > public interface PropertyChangeListener extends java.util.EventListener { > ^ > jdk/src/share/classes/java/beans/VetoableChangeListener.java:33: Note: > Candidate functional interface > public interface VetoableChangeListener extends java.util.EventListener { > ^ > jdk/src/share/classes/java/beans/ExceptionListener.java:34: Note: Candidate > functional interface > public interface ExceptionListener { > ^ > jdk/src/share/classes/java/beans/beancontext/BeanContextServiceRevokedListener.java:37: > Note: Candidate functional interface > public interface BeanContextServiceRevokedListener extends EventListener { > ^ > jdk/src/share/classes/java/beans/beancontext/BeanContextProxy.java:76: Note: > Candidate functional interface > public interface BeanContextProxy { > ^ > jdk/src/share/classes/java/beans/beancontext/BeanContextContainerProxy.java:43: > Note: Candidate functional interface > public interface BeanContextContainerProxy { > ^ > jdk/src/share/classes/java/beans/beancontext/BeanContextChildComponentProxy.java:44: > Note: Candidate functional interface > public interface BeanContextChildComponentProxy { > ^ > networking > ========== > > jdk/src/share/classes/java/net/ContentHandlerFactory.java:41: Note: Candidate > functional interface > public interface ContentHandlerFactory { > ^ > jdk/src/share/classes/java/net/HttpCookie.java:855: Note: Candidate > functional interface > static interface CookieAttributeAssignor { > ^ > jdk/src/share/classes/java/net/SocketImplFactory.java:40: Note: Candidate > functional interface > interface SocketImplFactory { > ^ > jdk/src/share/classes/java/net/CookiePolicy.java:38: Note: Candidate > functional interface > public interface CookiePolicy { > ^ > jdk/src/share/classes/java/net/URLStreamHandlerFactory.java:40: Note: > Candidate functional interface > public interface URLStreamHandlerFactory { > ^ > jdk/src/share/classes/java/net/DatagramSocketImplFactory.java:38: Note: > Candidate functional interface > interface DatagramSocketImplFactory { > ^ > jdk/src/share/classes/java/net/FileNameMap.java:35: Note: Candidate > functional interface > public interface FileNameMap { > ^ > jdk/src/share/classes/java/net/ProtocolFamily.java:34: Note: Candidate > functional interface > public interface ProtocolFamily { > ^ > jdk/src/share/classes/javax/net/ssl/HostnameVerifier.java:46: Note: Candidate > functional interface > public interface HostnameVerifier { > ^ > jdk/src/share/classes/javax/net/ssl/HandshakeCompletedListener.java:44: Note: > Candidate functional interface > public interface HandshakeCompletedListener extends EventListener > ^ > jmx/management > ================ > > jdk/src/share/classes/java/lang/management/PlatformManagedObject.java:52: > Note: Candidate functional interface > public interface PlatformManagedObject { > ^ > jdk/src/share/classes/java/lang/management/PlatformComponent.java:279: Note: > Candidate functional interface > interface MXBeanFetcher<T extends PlatformManagedObject> { > ^ > jdk/src/share/classes/java/lang/instrument/ClassFileTransformer.java:50: > Note: Candidate functional interface > public interface ClassFileTransformer { > ^ > jdk/src/share/classes/javax/management/openmbean/CompositeDataView.java:109: > Note: Candidate functional interface > public interface CompositeDataView { > ^ > jdk/src/share/classes/javax/management/NotificationFilter.java:35: Note: > Candidate functional interface > public interface NotificationFilter extends java.io.Serializable { > ^ > jdk/src/share/classes/javax/management/remote/JMXAddressable.java:44: Note: > Candidate functional interface > public interface JMXAddressable { > ^ > jdk/src/share/classes/javax/management/remote/JMXAuthenticator.java:52: Note: > Candidate functional interface > public interface JMXAuthenticator { > ^ > jdk/src/share/classes/javax/management/remote/JMXConnectorServerProvider.java:42: > Note: Candidate functional interface > public interface JMXConnectorServerProvider { > ^ > jdk/src/share/classes/javax/management/remote/JMXConnectorProvider.java:41: > Note: Candidate functional interface > public interface JMXConnectorProvider { > ^ > jdk/src/share/classes/javax/management/NotificationListener.java:34: Note: > Candidate functional interface > public interface NotificationListener extends java.util.EventListener { > ^ > jdk/src/share/classes/javax/management/DescriptorRead.java:33: Note: > Candidate functional interface > public interface DescriptorRead { > ^ > concurrent - Assume this will be done first upstream in Doug's repos > ============ > > jdk/src/share/classes/java/util/concurrent/ThreadFactory.java:58: Note: > Candidate functional interface > public interface ThreadFactory { > ^ > jdk/src/share/classes/java/util/concurrent/ForkJoinPool.java:545: Note: > Candidate functional interface > public static interface ForkJoinWorkerThreadFactory { > ^ > jdk/src/share/classes/java/util/concurrent/RejectedExecutionHandler.java:44: > Note: Candidate functional interface > public interface RejectedExecutionHandler { > ^ > jdk/src/share/classes/java/util/concurrent/Callable.java:57: Note: Candidate > functional interface > public interface Callable<V> { > ^ > jdk/src/share/classes/java/util/concurrent/Executor.java:128: Note: Candidate > functional interface > public interface Executor { >