JDK 8 code review request for 8005623: Retrofit FunctionalInterface annotations to core platform interfaces

Chris Hegarty chris.hegarty at oracle.com
Tue Feb 5 23:20:39 UTC 2013


On 5 Feb 2013, at 22:34, Mike Duigou <mike.duigou at oracle.com> wrote:

> Looks fine to me.

+1, looks good to me too.

-Chris

> 
> 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 {
> 



More information about the core-libs-dev mailing list