Description
Here is a snippet from IndexInput's documentation:
The original instance must take care that cloned instances throw AlreadyClosedException when the original one is closed.
But concrete implementations don't throw this AlreadyClosedException (this would break the contract on Closeable). For example, see NIOFSDirectory:
public void close() throws IOException { if (!isClone) { channel.close(); } }
What trapped me was that the abstract class IndexInput overrides the default implementation of clone(), but doesn't do anything useful... I guess you could make it final and provide the tracking for cloned instances in this class rather than reimplementing it everywhere else (isCloned() would be a superclass method then too). Thoughts?