Ben,

Something to potentially consider regarding interfaces; While changing the 
signatures of existing interfaces will break the API, you could do one of two 
things:
1. copy the current interface wholesale and change the name to include a digit 
i.e. MyInterface => MyInterface1
Where the new interface name has the updated signature/implements.  
Implementations of the interface can then change to implement the newly name 
one, while existing implementations continue to work against the original 
interface.  The original interface can be marked as "@Deprecated use interface 
XXXX" and eventually removed altogether.

2. create a new interface that extends the original interface adding the 
additional changes.  This also uses the same process for implementation 
classes, but has the downside of NOT being able to deprecate/remove the 
original names if desired.

Anyway, something to consider.

Chris Snider
Senior Software Engineer


-----Original Message-----
From: Ben Caradoc-Davies [mailto:b...@transient.nz] 
Sent: Monday, June 04, 2018 5:25 PM
To: GeoTools Devel <geotools-devel@lists.sourceforge.net>; Geoserver-devel 
<geoserver-de...@lists.sourceforge.net>
Subject: [Geoserver-devel] API changes to add AutoCloseable for 
try-with-resources

Many interfaces in GeoTools and GeoServer use the Dispose pattern, often 
with a dispose() method, but do not implement AutoCloseable, preventing 
their use in a try-with-resources statement. Examples range from 
ImageReader to DataStore/DataAccess. Some interfaces like FeatureReader 
already implement Closeable and thus AutoCloseable, but many do not.

Java 7 try-with-resources improves code quality because it simplifies 
code by automating common boilerplate:
https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html

Adding AutoCloseable to an interface is an API-breaking change because 
third-party subclasses that do not implement a close() method will no 
longer compile. Any change would be applied only to master and would 
target GeoTools 20.0 and GeoServer 2.14.0.

- Should we add AutoCloseable to interfaces, and if so which ones? We 
could make a list.

- Do we make the change one interface at a time or try to do them all at 
once?

- Should we rename dispose() to close() in implementers and add a 
deprecated dispose() that wraps close(), or just add a close() that 
wraps dispose()?

- As we are breaking the API anyway, should we get rid of dispose() 
entirely by renaming it to close() without adding a deprecated wrapper?

- I thought of updating only interfaces and overrides. A more ambitious 
scope would find every deprecated dispose() and refactor to use 
try-with-resources. The alternative is to refactor incrementally over 
time. How do we wish to pay off our technical debt?

- Who is interested in participating in this work?

Kind regards,

-- 
Ben Caradoc-Davies <b...@transient.nz>
Director
Transient Software Limited <https://transient.nz/>
New Zealand

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Geoserver-devel mailing list
geoserver-de...@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
GeoTools-Devel mailing list
GeoTools-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to