Author: schulte
Date: Tue Jun 28 00:51:38 2016
New Revision: 1750429
URL: http://svn.apache.org/viewvc?rev=1750429&view=rev
Log:
o Javadoc updates for methods 'IOUtil.close'.
Modified:
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/io/IOUtil.java
Modified:
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/io/IOUtil.java
URL:
http://svn.apache.org/viewvc/maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/io/IOUtil.java?rev=1750429&r1=1750428&r2=1750429&view=diff
==============================================================================
---
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/io/IOUtil.java
(original)
+++
maven/shared/trunk/maven-shared-utils/src/main/java/org/apache/maven/shared/utils/io/IOUtil.java
Tue Jun 28 00:51:38 2016
@@ -757,112 +757,522 @@ public final class IOUtil
// ----------------------------------------------------------------------
/**
- * Closes a channel. Channel can be null and any IOException's will be
swallowed.
+ * Closes a {@code Channel} suppressing any {@code IOException}.
+ * <p>
+ * <b>Note:</b><br/>The usecase justifying this method is a shortcoming of
the Java language up to but not including
+ * Java 7. For any code targetting Java 7 or later use of this method is
highly discouraged and the
+ * {@code try-with-resources} statement should be used instead. Care must
be taken to not use this method in a way
+ * {@code IOException}s get suppressed incorrectly.
+ * <strong>You must close all resources in use inside the {@code try}
block to not suppress exceptions in the
+ * {@code finally} block incorrectly by using this method.</strong>
+ * </p>
+ * <p>
+ * <b>Example:</b><br/>
+ * <pre>
+ * // Introduce variables for the resources and initialize them to null.
This cannot throw an exception.
+ * Closeable resource1 = null;
+ * Closeable resource2 = null;
+ * try
+ * {
+ * // Obtain a resource object and assign it to variable resource1.
This may throw an exception.
+ * // If successful, resource1 != null.
+ * resource1 = ...
*
- * @param channel The stream to close.
+ * // Obtain a resource object and assign it to variable resource2.
This may throw an exception.
+ * // If successful, resource2 != null. Not reached if an exception
has been thrown above.
+ * resource2 = ...
+ *
+ * // Perform operations on the resources. This may throw an
exception. Not reached if an exception has been
+ * // thrown above. Note: Treat the variables resource1 and resource2
the same way as if they would have been
+ * // declared with the final modifier - that is - do NOT write
anyting like resource1 = something else or
+ * // resource2 = something else here.
+ * resource1 ...
+ * resource2 ...
+ *
+ * // Finally, close the resources and set the variables to null
indicating successful completion.
+ * // This may throw an exception. Not reached if an exception has
been thrown above.
+ * resource1.close();
+ * resource1 = null;
+ * // Not reached if an exception has been thrown above.
+ * resource2.close();
+ * resource2 = null;
+ *
+ * // All resources are closed at this point and all operations (up to
here) completed successfully without
+ * // throwing an exception we would need to handle (by letting it
propagate or by catching and handling it).
+ * }
+ * finally
+ * {
+ * // Cleanup any resource not closed in the try block due to an
exception having been thrown and suppress any
+ * // exception this may produce to not stop the exception from the
try block to be propagated. If the try
+ * // block completed successfully, all variables will have been set
to null there and this will not do
+ * // anything. This is just to cleanup properly in case of an
exception.
+ *
+ * IOUtil.close( resource1 );
+ * IOUtil.close( resource2 );
+ *
+ * // Without that utility method you would need to write the
following:
+ * //
+ * // try
+ * // {
+ * // if ( resource1 != null )
+ * // {
+ * // resource1.close();
+ * // }
+ * // }
+ * // catch( IOException e )
+ * // {
+ * // Suppressed. If resource1 != null, an exception has already
been thrown in the try block we need to
+ * // propagate instead of this one.
+ * // }
+ * // finally
+ * // {
+ * // try
+ * // {
+ * // if ( resource2 != null )
+ * // {
+ * // resource2.close();
+ * // }
+ * // }
+ * // catch ( IOException e )
+ * // {
+ * // Suppressed. If resource2 != null, an exception has
already been thrown in the try block we need to
+ * // propagate instead of this one.
+ * // }
+ * // }
+ * }
+ * </pre>
+ * </p>
+ *
+ * @param channel The channel to close or {@code null}.
*/
public static void close( @Nullable Channel channel )
{
- if ( channel == null )
- {
- return;
- }
-
try
{
- channel.close();
+ if ( channel != null )
+ {
+ channel.close();
+ }
}
catch ( IOException ex )
{
- // ignore
+ // Suppressed
}
}
/**
- * Closes the input stream. The input stream can be null and any
IOException's will be swallowed.
+ * Closes an {@code InputStream} suppressing any {@code IOException}.
+ * <p>
+ * <b>Note:</b><br/>The usecase justifying this method is a shortcoming of
the Java language up to but not including
+ * Java 7. For any code targetting Java 7 or later use of this method is
highly discouraged and the
+ * {@code try-with-resources} statement should be used instead. Care must
be taken to not use this method in a way
+ * {@code IOException}s get suppressed incorrectly.
+ * <strong>You must close all resources in use inside the {@code try}
block to not suppress exceptions in the
+ * {@code finally} block incorrectly by using this method.</strong>
+ * </p>
+ * <p>
+ * <b>Example:</b><br/>
+ * <pre>
+ * // Introduce variables for the resources and initialize them to null.
This cannot throw an exception.
+ * Closeable resource1 = null;
+ * Closeable resource2 = null;
+ * try
+ * {
+ * // Obtain a resource object and assign it to variable resource1.
This may throw an exception.
+ * // If successful, resource1 != null.
+ * resource1 = ...
+ *
+ * // Obtain a resource object and assign it to variable resource2.
This may throw an exception.
+ * // If successful, resource2 != null. Not reached if an exception
has been thrown above.
+ * resource2 = ...
+ *
+ * // Perform operations on the resources. This may throw an
exception. Not reached if an exception has been
+ * // thrown above. Note: Treat the variables resource1 and resource2
the same way as if they would have been
+ * // declared with the final modifier - that is - do NOT write
anyting like resource1 = something else or
+ * // resource2 = something else here.
+ * resource1 ...
+ * resource2 ...
+ *
+ * // Finally, close the resources and set the variables to null
indicating successful completion.
+ * // This may throw an exception. Not reached if an exception has
been thrown above.
+ * resource1.close();
+ * resource1 = null;
+ * // Not reached if an exception has been thrown above.
+ * resource2.close();
+ * resource2 = null;
*
- * @param inputStream The stream to close.
+ * // All resources are closed at this point and all operations (up to
here) completed successfully without
+ * // throwing an exception we would need to handle (by letting it
propagate or by catching and handling it).
+ * }
+ * finally
+ * {
+ * // Cleanup any resource not closed in the try block due to an
exception having been thrown and suppress any
+ * // exception this may produce to not stop the exception from the
try block to be propagated. If the try
+ * // block completed successfully, all variables will have been set
to null there and this will not do
+ * // anything. This is just to cleanup properly in case of an
exception.
+ *
+ * IOUtil.close( resource1 );
+ * IOUtil.close( resource2 );
+ *
+ * // Without that utility method you would need to write the
following:
+ * //
+ * // try
+ * // {
+ * // if ( resource1 != null )
+ * // {
+ * // resource1.close();
+ * // }
+ * // }
+ * // catch( IOException e )
+ * // {
+ * // Suppressed. If resource1 != null, an exception has already
been thrown in the try block we need to
+ * // propagate instead of this one.
+ * // }
+ * // finally
+ * // {
+ * // try
+ * // {
+ * // if ( resource2 != null )
+ * // {
+ * // resource2.close();
+ * // }
+ * // }
+ * // catch ( IOException e )
+ * // {
+ * // Suppressed. If resource2 != null, an exception has
already been thrown in the try block we need to
+ * // propagate instead of this one.
+ * // }
+ * // }
+ * }
+ * </pre>
+ * </p>
+ *
+ * @param inputStream The stream to close or {@code null}.
*/
public static void close( @Nullable InputStream inputStream )
{
- if ( inputStream == null )
- {
- return;
- }
-
try
{
- inputStream.close();
+ if ( inputStream != null )
+ {
+ inputStream.close();
+ }
}
catch ( IOException ex )
{
- // ignore
+ // Suppressed
}
}
/**
- * Closes the output stream. The output stream can be null and any
IOException's will be swallowed.
+ * Closes an {@code OutputStream} suppressing any {@code IOException}.
+ * <p>
+ * <b>Note:</b><br/>The usecase justifying this method is a shortcoming of
the Java language up to but not including
+ * Java 7. For any code targetting Java 7 or later use of this method is
highly discouraged and the
+ * {@code try-with-resources} statement should be used instead. Care must
be taken to not use this method in a way
+ * {@code IOException}s get suppressed incorrectly.
+ * <strong>You must close all resources in use inside the {@code try}
block to not suppress exceptions in the
+ * {@code finally} block incorrectly by using this method.</strong>
+ * </p>
+ * <p>
+ * <b>Example:</b><br/>
+ * <pre>
+ * // Introduce variables for the resources and initialize them to null.
This cannot throw an exception.
+ * Closeable resource1 = null;
+ * Closeable resource2 = null;
+ * try
+ * {
+ * // Obtain a resource object and assign it to variable resource1.
This may throw an exception.
+ * // If successful, resource1 != null.
+ * resource1 = ...
+ *
+ * // Obtain a resource object and assign it to variable resource2.
This may throw an exception.
+ * // If successful, resource2 != null. Not reached if an exception
has been thrown above.
+ * resource2 = ...
+ *
+ * // Perform operations on the resources. This may throw an
exception. Not reached if an exception has been
+ * // thrown above. Note: Treat the variables resource1 and resource2
the same way as if they would have been
+ * // declared with the final modifier - that is - do NOT write
anyting like resource1 = something else or
+ * // resource2 = something else here.
+ * resource1 ...
+ * resource2 ...
+ *
+ * // Finally, close the resources and set the variables to null
indicating successful completion.
+ * // This may throw an exception. Not reached if an exception has
been thrown above.
+ * resource1.close();
+ * resource1 = null;
+ * // Not reached if an exception has been thrown above.
+ * resource2.close();
+ * resource2 = null;
+ *
+ * // All resources are closed at this point and all operations (up to
here) completed successfully without
+ * // throwing an exception we would need to handle (by letting it
propagate or by catching and handling it).
+ * }
+ * finally
+ * {
+ * // Cleanup any resource not closed in the try block due to an
exception having been thrown and suppress any
+ * // exception this may produce to not stop the exception from the
try block to be propagated. If the try
+ * // block completed successfully, all variables will have been set
to null there and this will not do
+ * // anything. This is just to cleanup properly in case of an
exception.
+ *
+ * IOUtil.close( resource1 );
+ * IOUtil.close( resource2 );
*
- * @param outputStream The stream to close.
+ * // Without that utility method you would need to write the
following:
+ * //
+ * // try
+ * // {
+ * // if ( resource1 != null )
+ * // {
+ * // resource1.close();
+ * // }
+ * // }
+ * // catch( IOException e )
+ * // {
+ * // Suppressed. If resource1 != null, an exception has already
been thrown in the try block we need to
+ * // propagate instead of this one.
+ * // }
+ * // finally
+ * // {
+ * // try
+ * // {
+ * // if ( resource2 != null )
+ * // {
+ * // resource2.close();
+ * // }
+ * // }
+ * // catch ( IOException e )
+ * // {
+ * // Suppressed. If resource2 != null, an exception has
already been thrown in the try block we need to
+ * // propagate instead of this one.
+ * // }
+ * // }
+ * }
+ * </pre>
+ * </p>
+ *
+ * @param outputStream The stream to close or {@code null}.
*/
public static void close( @Nullable OutputStream outputStream )
{
- if ( outputStream == null )
- {
- return;
- }
-
try
{
- outputStream.close();
+ if ( outputStream != null )
+ {
+ outputStream.close();
+ }
}
catch ( IOException ex )
{
- // ignore
+ // Suppressed
}
}
/**
- * Closes the reader. The reader can be null and any IOException's will be
swallowed.
+ * Closes a {@code Reader} suppressing any {@code IOException}.
+ * <p>
+ * <b>Note:</b><br/>The usecase justifying this method is a shortcoming of
the Java language up to but not including
+ * Java 7. For any code targetting Java 7 or later use of this method is
highly discouraged and the
+ * {@code try-with-resources} statement should be used instead. Care must
be taken to not use this method in a way
+ * {@code IOException}s get suppressed incorrectly.
+ * <strong>You must close all resources in use inside the {@code try}
block to not suppress exceptions in the
+ * {@code finally} block incorrectly by using this method.</strong>
+ * </p>
+ * <p>
+ * <b>Example:</b><br/>
+ * <pre>
+ * // Introduce variables for the resources and initialize them to null.
This cannot throw an exception.
+ * Closeable resource1 = null;
+ * Closeable resource2 = null;
+ * try
+ * {
+ * // Obtain a resource object and assign it to variable resource1.
This may throw an exception.
+ * // If successful, resource1 != null.
+ * resource1 = ...
+ *
+ * // Obtain a resource object and assign it to variable resource2.
This may throw an exception.
+ * // If successful, resource2 != null. Not reached if an exception
has been thrown above.
+ * resource2 = ...
+ *
+ * // Perform operations on the resources. This may throw an
exception. Not reached if an exception has been
+ * // thrown above. Note: Treat the variables resource1 and resource2
the same way as if they would have been
+ * // declared with the final modifier - that is - do NOT write
anyting like resource1 = something else or
+ * // resource2 = something else here.
+ * resource1 ...
+ * resource2 ...
*
- * @param reader The reader to close.
+ * // Finally, close the resources and set the variables to null
indicating successful completion.
+ * // This may throw an exception. Not reached if an exception has
been thrown above.
+ * resource1.close();
+ * resource1 = null;
+ * // Not reached if an exception has been thrown above.
+ * resource2.close();
+ * resource2 = null;
+ *
+ * // All resources are closed at this point and all operations (up to
here) completed successfully without
+ * // throwing an exception we would need to handle (by letting it
propagate or by catching and handling it).
+ * }
+ * finally
+ * {
+ * // Cleanup any resource not closed in the try block due to an
exception having been thrown and suppress any
+ * // exception this may produce to not stop the exception from the
try block to be propagated. If the try
+ * // block completed successfully, all variables will have been set
to null there and this will not do
+ * // anything. This is just to cleanup properly in case of an
exception.
+ *
+ * IOUtil.close( resource1 );
+ * IOUtil.close( resource2 );
+ *
+ * // Without that utility method you would need to write the
following:
+ * //
+ * // try
+ * // {
+ * // if ( resource1 != null )
+ * // {
+ * // resource1.close();
+ * // }
+ * // }
+ * // catch( IOException e )
+ * // {
+ * // Suppressed. If resource1 != null, an exception has already
been thrown in the try block we need to
+ * // propagate instead of this one.
+ * // }
+ * // finally
+ * // {
+ * // try
+ * // {
+ * // if ( resource2 != null )
+ * // {
+ * // resource2.close();
+ * // }
+ * // }
+ * // catch ( IOException e )
+ * // {
+ * // Suppressed. If resource2 != null, an exception has
already been thrown in the try block we need to
+ * // propagate instead of this one.
+ * // }
+ * // }
+ * }
+ * </pre>
+ * </p>
+ *
+ * @param reader The reader to close or {@code null}.
*/
public static void close( @Nullable Reader reader )
{
- if ( reader == null )
- {
- return;
- }
-
try
{
- reader.close();
+ if ( reader != null )
+ {
+ reader.close();
+ }
}
catch ( IOException ex )
{
- // ignore
+ // Suppressed
}
}
/**
- * Closes the writer. The writer can be null and any IOException's will be
swallowed.
+ * Closes a {@code Writer} suppressing any {@code IOException}.
+ * <p>
+ * <b>Note:</b><br/>The usecase justifying this method is a shortcoming of
the Java language up to but not including
+ * Java 7. For any code targetting Java 7 or later use of this method is
highly discouraged and the
+ * {@code try-with-resources} statement should be used instead. Care must
be taken to not use this method in a way
+ * {@code IOException}s get suppressed incorrectly.
+ * <strong>You must close all resources in use inside the {@code try}
block to not suppress exceptions in the
+ * {@code finally} block incorrectly by using this method.</strong>
+ * </p>
+ * <p>
+ * <b>Example:</b><br/>
+ * <pre>
+ * // Introduce variables for the resources and initialize them to null.
This cannot throw an exception.
+ * Closeable resource1 = null;
+ * Closeable resource2 = null;
+ * try
+ * {
+ * // Obtain a resource object and assign it to variable resource1.
This may throw an exception.
+ * // If successful, resource1 != null.
+ * resource1 = ...
+ *
+ * // Obtain a resource object and assign it to variable resource2.
This may throw an exception.
+ * // If successful, resource2 != null. Not reached if an exception
has been thrown above.
+ * resource2 = ...
+ *
+ * // Perform operations on the resources. This may throw an
exception. Not reached if an exception has been
+ * // thrown above. Note: Treat the variables resource1 and resource2
the same way as if they would have been
+ * // declared with the final modifier - that is - do NOT write
anyting like resource1 = something else or
+ * // resource2 = something else here.
+ * resource1 ...
+ * resource2 ...
+ *
+ * // Finally, close the resources and set the variables to null
indicating successful completion.
+ * // This may throw an exception. Not reached if an exception has
been thrown above.
+ * resource1.close();
+ * resource1 = null;
+ * // Not reached if an exception has been thrown above.
+ * resource2.close();
+ * resource2 = null;
+ *
+ * // All resources are closed at this point and all operations (up to
here) completed successfully without
+ * // throwing an exception we would need to handle (by letting it
propagate or by catching and handling it).
+ * }
+ * finally
+ * {
+ * // Cleanup any resource not closed in the try block due to an
exception having been thrown and suppress any
+ * // exception this may produce to not stop the exception from the
try block to be propagated. If the try
+ * // block completed successfully, all variables will have been set
to null there and this will not do
+ * // anything. This is just to cleanup properly in case of an
exception.
*
- * @param writer The writer to close.
+ * IOUtil.close( resource1 );
+ * IOUtil.close( resource2 );
+ *
+ * // Without that utility method you would need to write the
following:
+ * //
+ * // try
+ * // {
+ * // if ( resource1 != null )
+ * // {
+ * // resource1.close();
+ * // }
+ * // }
+ * // catch( IOException e )
+ * // {
+ * // Suppressed. If resource1 != null, an exception has already
been thrown in the try block we need to
+ * // propagate instead of this one.
+ * // }
+ * // finally
+ * // {
+ * // try
+ * // {
+ * // if ( resource2 != null )
+ * // {
+ * // resource2.close();
+ * // }
+ * // }
+ * // catch ( IOException e )
+ * // {
+ * // Suppressed. If resource2 != null, an exception has
already been thrown in the try block we need to
+ * // propagate instead of this one.
+ * // }
+ * // }
+ * }
+ * </pre>
+ * </p>
+ *
+ * @param writer The writer to close or {@code null}.
*/
public static void close( @Nullable Writer writer )
{
- if ( writer == null )
- {
- return;
- }
-
try
{
- writer.close();
+ if ( writer != null )
+ {
+ writer.close();
+ }
}
catch ( IOException ex )
{
- // ignore
+ // Suppressed
}
}
}