You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sc...@apache.org on 2017/01/07 23:38:43 UTC

[2/4] maven-surefire git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/maven-surefire

Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/maven-surefire


Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/67456544
Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/67456544
Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/67456544

Branch: refs/heads/master
Commit: 6745654499f086cd9b21b67026bbaf6e195edfb7
Parents: e5a6b9c 201a313
Author: Christian Schulte <sc...@apache.org>
Authored: Sun Jan 8 00:30:24 2017 +0100
Committer: Christian Schulte <sc...@apache.org>
Committed: Sun Jan 8 00:30:24 2017 +0100

----------------------------------------------------------------------
 .../plugin/surefire/SurefireProperties.java     |  1 +
 .../output/LostCommandsDumpSingleton.java       | 62 +++++++++++-
 .../output/ThreadedStreamConsumer.java          | 35 ++++---
 .../report/ConsoleOutputFileReporter.java       | 35 +++----
 .../maven/surefire/report/FileReporterTest.java |  3 +-
 .../surefire/report/SurefireReportMojoTest.java |  2 +-
 .../runorder/RunEntryStatisticsMap.java         | 34 +++----
 .../maven/surefire/booter/CommandReader.java    | 21 ++---
 .../surefire/booter/DumpErrorSingleton.java     | 99 ++++++++++++++++++++
 .../surefire/booter/ForkingRunListener.java     | 16 ++--
 .../surefire/booter/MasterProcessCommand.java   | 29 +-----
 .../maven/surefire/booter/ForkedBooter.java     | 41 +++-----
 .../surefire/booter/SystemPropertyManager.java  | 17 +++-
 .../maven/surefire/its/fixture/TestFile.java    |  4 +-
 .../src/test/java/it/BasicTest.java             | 13 ++-
 .../src/test/java/runListener/FileHelper.java   |  2 +-
 .../plugins/surefire/dumppid/DumpPidMojo.java   |  5 +-
 .../testng/testrunnerfactory/FileHelper.java    | 16 ++--
 18 files changed, 282 insertions(+), 153 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/67456544/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireProperties.java
----------------------------------------------------------------------
diff --cc maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireProperties.java
index 2e3aa58,53aa134..b645032
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireProperties.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireProperties.java
@@@ -237,17 -236,7 +237,18 @@@ public class SurefirePropertie
          }
          finally
          {
 -            close( inStream ); // @todo use try-with-resources JDK7, search in all code
++            // @todo use try-with-resources JDK7, search in all code
 +            try
 +            {
 +                if ( in != null )
 +                {
 +                    in.close();
 +                }
 +            }
 +            catch ( final IOException e )
 +            {
 +                // Suppressed.
 +            }
          }
      }
  

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/67456544/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/ConsoleOutputFileReporter.java
----------------------------------------------------------------------
diff --cc maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/ConsoleOutputFileReporter.java
index 552c12a,914d684..da08d01
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/ConsoleOutputFileReporter.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/ConsoleOutputFileReporter.java
@@@ -22,9 -22,10 +22,8 @@@ package org.apache.maven.plugin.surefir
  import java.io.File;
  import java.io.FileOutputStream;
  import java.io.IOException;
--
+ import org.apache.maven.shared.utils.io.IOUtil;
  import org.apache.maven.surefire.report.ReportEntry;
--
  import static org.apache.maven.plugin.surefire.report.FileReporter.getReportFile;
  
  /**
@@@ -65,19 -66,21 +64,17 @@@ public class ConsoleOutputFileReporte
      @SuppressWarnings( "checkstyle:emptyblock" )
      public void close()
      {
--        if ( fileOutputStream != null )
++        try
          {
--            try
--            {
 -                fileOutputStream.flush();
--                fileOutputStream.close();
--            }
--            catch ( IOException e )
--            {
 -                // do nothing
--            }
--            finally
--            {
--                fileOutputStream = null;
--            }
++            this.fileOutputStream.close();
++        }
++        catch ( final IOException e )
++        {
++            throw new RuntimeException( "Failure closing reporter.", e );
++        }
++        finally
++        {
++            this.fileOutputStream = null;
          }
      }
  

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/67456544/maven-surefire-common/src/test/java/org/apache/maven/surefire/report/FileReporterTest.java
----------------------------------------------------------------------
diff --cc maven-surefire-common/src/test/java/org/apache/maven/surefire/report/FileReporterTest.java
index 87d4b0c,076b23c..f8a92d8
--- a/maven-surefire-common/src/test/java/org/apache/maven/surefire/report/FileReporterTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/surefire/report/FileReporterTest.java
@@@ -19,16 -19,15 +19,15 @@@ package org.apache.maven.surefire.repor
   * under the License.
   */
  
 +import java.io.File;
 +import java.io.IOException;
 +import java.util.ArrayList;
+ import junit.framework.TestCase;
  import org.apache.maven.plugin.surefire.report.FileReporter;
  import org.apache.maven.plugin.surefire.report.ReportEntryType;
  import org.apache.maven.plugin.surefire.report.TestSetStats;
  import org.apache.maven.plugin.surefire.report.WrappedReportEntry;
  
- import junit.framework.TestCase;
 -import java.io.File;
 -import java.util.ArrayList;
--
  public class FileReporterTest
      extends TestCase
  {

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/67456544/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportMojoTest.java
----------------------------------------------------------------------
diff --cc maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportMojoTest.java
index 9fca007,724e72d..8532b1b
--- a/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportMojoTest.java
+++ b/maven-surefire-report-plugin/src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportMojoTest.java
@@@ -638,10 -638,8 +638,10 @@@ public class SurefireReportMojoTes
          {
              outputHtml.getParentFile().mkdirs();
              writer = WriterFactory.newXmlWriter( outputHtml );
- 
+             // renderer doxia 1.6 already closed the writer
              renderer.generateDocument( writer, (SiteRendererSink) mojo.getSink(), context );
 +            writer.close();
 +            writer = null;
          }
          finally
          {

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/67456544/surefire-api/src/main/java/org/apache/maven/plugin/surefire/runorder/RunEntryStatisticsMap.java
----------------------------------------------------------------------
diff --cc surefire-api/src/main/java/org/apache/maven/plugin/surefire/runorder/RunEntryStatisticsMap.java
index a66e797,eab2a81..2e9c133
--- a/surefire-api/src/main/java/org/apache/maven/plugin/surefire/runorder/RunEntryStatisticsMap.java
+++ b/surefire-api/src/main/java/org/apache/maven/plugin/surefire/runorder/RunEntryStatisticsMap.java
@@@ -20,16 -20,15 +20,12 @@@ package org.apache.maven.plugin.surefir
   */
  
  
 -import org.apache.maven.shared.utils.io.IOUtil;
--import org.apache.maven.surefire.report.ReportEntry;
--
  import java.io.BufferedReader;
 +import java.io.BufferedWriter;
  import java.io.File;
--import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
  import java.io.FileReader;
  import java.io.IOException;
 -import java.io.PrintWriter;
 +import java.io.OutputStreamWriter;
  import java.io.Reader;
  import java.util.ArrayList;
  import java.util.Comparator;
@@@ -39,9 -38,8 +35,9 @@@ import java.util.Map
  import java.util.concurrent.ConcurrentHashMap;
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;
--
  import static java.util.Collections.sort;
 +import org.apache.maven.shared.utils.io.IOUtil;
++import org.apache.maven.surefire.report.ReportEntry;
  import static org.apache.maven.plugin.surefire.runorder.RunEntryStatistics.fromReportEntry;
  import static org.apache.maven.plugin.surefire.runorder.RunEntryStatistics.fromString;
  
@@@ -70,15 -68,8 +66,11 @@@ public final class RunEntryStatisticsMa
              try
              {
                  reader = new FileReader( file );
 -                return fromReader( reader );
 +                final RunEntryStatisticsMap result = fromReader( reader );
 +                reader.close();
 +                reader = null;
 +                return result;
              }
-             catch ( FileNotFoundException e )
-             {
-                 throw new RuntimeException( e );
-             }
              catch ( IOException e )
              {
                  throw new RuntimeException( e );
@@@ -97,19 -88,14 +89,27 @@@
      static RunEntryStatisticsMap fromReader( Reader fileReader )
          throws IOException
      {
++        BufferedReader reader = null;
          Map<String, RunEntryStatistics> result = new HashMap<String, RunEntryStatistics>();
-         BufferedReader bufferedReader = new BufferedReader( fileReader );
-         String line = bufferedReader.readLine();
-         while ( line != null )
 -        BufferedReader reader = new BufferedReader( fileReader );
 -        for ( String line = reader.readLine(); line != null && !line.startsWith( "#" ); line = reader.readLine() )
++        try
          {
-             if ( !line.startsWith( "#" ) )
 -            RunEntryStatistics stats = fromString( line );
 -            result.put( stats.getTestName(), stats );
++            reader = new BufferedReader( fileReader );
++            for ( String line = reader.readLine(); line != null; line = reader.readLine() )
 +            {
-                 final RunEntryStatistics stats = fromString( line );
-                 result.put( stats.getTestName(), stats );
++                if ( !line.startsWith( "#" ) )
++                {
++                    RunEntryStatistics stats = fromString( line );
++                    result.put( stats.getTestName(), stats );
++                }
 +            }
-             line = bufferedReader.readLine();
++            reader.close();
++            reader = null;
++            return new RunEntryStatisticsMap( result );
++        }
++        finally
++        {
++            IOUtil.close( reader );
          }
--        return new RunEntryStatisticsMap( result );
      }
  
      public void serialize( File file )

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/67456544/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java
----------------------------------------------------------------------
diff --cc surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java
index 4558aba,aa0dadd..7439ec3
--- a/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/booter/ForkingRunListener.java
@@@ -19,10 -19,6 +19,11 @@@ package org.apache.maven.surefire.boote
   * under the License.
   */
  
 +import java.io.PrintStream;
 +import java.util.Enumeration;
 +import java.util.Properties;
- 
++import static java.lang.Integer.toHexString;
++import static java.nio.charset.Charset.defaultCharset;
  import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
  import org.apache.maven.plugin.surefire.log.api.ConsoleLoggerUtils;
  import org.apache.maven.surefire.report.ConsoleOutputReceiver;
@@@ -32,9 -28,13 +33,6 @@@ import org.apache.maven.surefire.report
  import org.apache.maven.surefire.report.SafeThrowable;
  import org.apache.maven.surefire.report.SimpleReportEntry;
  import org.apache.maven.surefire.report.StackTraceWriter;
 -
 -import java.io.PrintStream;
 -import java.util.Enumeration;
 -import java.util.Properties;
--
--import static java.lang.Integer.toHexString;
--import static java.nio.charset.Charset.defaultCharset;
  import static org.apache.maven.surefire.util.internal.StringUtils.encodeStringForForkCommunication;
  import static org.apache.maven.surefire.util.internal.StringUtils.escapeBytesToPrintable;
  import static org.apache.maven.surefire.util.internal.StringUtils.escapeToPrintable;
@@@ -208,7 -208,10 +206,11 @@@ public class ForkingRunListene
              target.write( encodeBytes, 0, encodeBytes.length );
              if ( target.checkError() )
              {
-                 throw new RuntimeException( "Unexpected IOException." );
+                 // We MUST NOT throw any exception from this method; otherwise we are in loop and CPU goes up:
+                 // ForkingRunListener -> Exception -> JUnit Notifier and RunListener -> ForkingRunListener -> Exception
+                 DumpErrorSingleton.getSingleton()
 -                        .dumpStreamText( "Unexpected IOException with stream: " + new String( buf, off, len ) );
++                    .dumpStreamText( "Unexpected IOException with stream: " + new String( buf, off, len ) );
++
              }
          }
      }

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/67456544/surefire-api/src/main/java/org/apache/maven/surefire/booter/MasterProcessCommand.java
----------------------------------------------------------------------
diff --cc surefire-api/src/main/java/org/apache/maven/surefire/booter/MasterProcessCommand.java
index d2d1673,a75aa83..bc95a39
--- a/surefire-api/src/main/java/org/apache/maven/surefire/booter/MasterProcessCommand.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/booter/MasterProcessCommand.java
@@@ -19,18 -19,17 +19,15 @@@ package org.apache.maven.surefire.boote
   * under the License.
   */
  
--import org.apache.maven.surefire.util.internal.StringUtils;
--
  import java.io.DataInputStream;
- import java.io.EOFException;
  import java.io.IOException;
  import java.io.UnsupportedEncodingException;
  import java.nio.charset.Charset;
--
+ import static java.lang.String.format;
++import org.apache.maven.surefire.util.internal.StringUtils;
+ import static org.apache.maven.surefire.util.internal.ObjectUtils.requireNonNull;
  import static org.apache.maven.surefire.util.internal.StringUtils.FORK_STREAM_CHARSET_NAME;
  import static org.apache.maven.surefire.util.internal.StringUtils.encodeStringForForkCommunication;
- import static org.apache.maven.surefire.util.internal.ObjectUtils.requireNonNull;
- import static java.lang.String.format;
  
  /**
   * Commands which are sent from plugin to the forked jvm.

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/67456544/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java
----------------------------------------------------------------------
diff --cc surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java
index 29047f2,b76df2f..6df3009
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java
@@@ -19,14 -19,14 +19,6 @@@ package org.apache.maven.surefire.boote
   * under the License.
   */
  
--import org.apache.maven.surefire.providerapi.ProviderParameters;
--import org.apache.maven.surefire.providerapi.SurefireProvider;
--import org.apache.maven.surefire.report.LegacyPojoStackTraceWriter;
--import org.apache.maven.surefire.report.ReporterFactory;
--import org.apache.maven.surefire.report.StackTraceWriter;
--import org.apache.maven.surefire.suite.RunResult;
--import org.apache.maven.surefire.testset.TestSetFailedException;
--
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.FileNotFoundException;
@@@ -38,13 -38,13 +30,19 @@@ import java.util.concurrent.ScheduledFu
  import java.util.concurrent.ScheduledThreadPoolExecutor;
  import java.util.concurrent.ThreadFactory;
  import java.util.concurrent.atomic.AtomicBoolean;
--
  import static java.lang.System.err;
  import static java.lang.System.out;
  import static java.lang.System.setErr;
  import static java.lang.System.setOut;
  import static java.lang.Thread.currentThread;
  import static java.util.concurrent.TimeUnit.SECONDS;
++import org.apache.maven.surefire.providerapi.ProviderParameters;
++import org.apache.maven.surefire.providerapi.SurefireProvider;
++import org.apache.maven.surefire.report.LegacyPojoStackTraceWriter;
++import org.apache.maven.surefire.report.ReporterFactory;
++import org.apache.maven.surefire.report.StackTraceWriter;
++import org.apache.maven.surefire.suite.RunResult;
++import org.apache.maven.surefire.testset.TestSetFailedException;
  import static org.apache.maven.surefire.booter.CommandReader.getReader;
  import static org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_BYE;
  import static org.apache.maven.surefire.booter.ForkingRunListener.BOOTERCODE_ERROR;

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/67456544/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SystemPropertyManager.java
----------------------------------------------------------------------
diff --cc surefire-booter/src/main/java/org/apache/maven/surefire/booter/SystemPropertyManager.java
index 4046b7b,a80656e..68d79a4
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SystemPropertyManager.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/SystemPropertyManager.java
@@@ -61,7 -58,7 +61,18 @@@ public class SystemPropertyManage
          }
          finally
          {
--            close( inStream ); // @todo use try-with-resources JDK7, search in all code
++            // @todo use try-with-resources JDK7, search in all code
++            try
++            {
++                if ( inStream != null )
++                {
++                    inStream.close();
++                }
++            }
++            catch ( final IOException e1 )
++            {
++                // Suppressed.
++            }
          }
      }
  
@@@ -120,6 -108,6 +131,10 @@@
          }
      }
  
++    /**
++     * @deprecated As of Java 7, please use the try-with-resources statement.
++     */
++    @Deprecated
      public static void close( InputStream inputStream )
      {
          if ( inputStream == null )

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/67456544/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/TestFile.java
----------------------------------------------------------------------
diff --cc surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/TestFile.java
index a2f021f,6d3d8e2..eb33e78
--- a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/TestFile.java
+++ b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/TestFile.java
@@@ -28,10 -28,10 +28,8 @@@ import java.io.IOException
  import java.net.URI;
  import java.nio.charset.Charset;
  import java.util.List;
--import org.apache.commons.io.FileUtils;
--
  import junit.framework.Assert;
--
++import org.apache.commons.io.FileUtils;
  import static junit.framework.Assert.assertTrue;
  
  /**

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/67456544/surefire-integration-tests/src/test/resources/classpath-order/src/test/java/it/BasicTest.java
----------------------------------------------------------------------
diff --cc surefire-integration-tests/src/test/resources/classpath-order/src/test/java/it/BasicTest.java
index 258fd0f,f46e3be..e595cd6
--- a/surefire-integration-tests/src/test/resources/classpath-order/src/test/java/it/BasicTest.java
+++ b/surefire-integration-tests/src/test/resources/classpath-order/src/test/java/it/BasicTest.java
@@@ -41,17 -43,15 +43,18 @@@ public class BasicTes
          assertEquals( "classes", props.getProperty( "Surefire" ) );
      }
  
-     private Properties getProperties(String resource)
+     private Properties getProperties( String resource )
 -            throws IOException
++        throws IOException
      {
 -        InputStream in = getClass().getResourceAsStream( resource );
 -        assertNotNull( in );
 +        InputStream in = null;
          try
          {
 +            in = getClass().getResourceAsStream( resource );
 +            assertNotNull( in );
              Properties props = new Properties();
              props.load( in );
 +            in.close();
 +            in = null;
              return props;
          }
          catch ( IOException e )

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/67456544/surefire-integration-tests/src/test/resources/junit4-runlistener/src/test/java/runListener/FileHelper.java
----------------------------------------------------------------------
diff --cc surefire-integration-tests/src/test/resources/junit4-runlistener/src/test/java/runListener/FileHelper.java
index 1acfa60,0112f31..c842a1d
--- a/surefire-integration-tests/src/test/resources/junit4-runlistener/src/test/java/runListener/FileHelper.java
+++ b/surefire-integration-tests/src/test/resources/junit4-runlistener/src/test/java/runListener/FileHelper.java
@@@ -51,7 -50,7 +51,7 @@@ public class FileHelpe
              }
              catch ( final IOException e )
              {
--                // Suppressed.
++                // Suppressed, so that the exception thrown in the try block will be propagated.
              }
          }
      }

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/67456544/surefire-integration-tests/src/test/resources/test-helper-dump-pid-plugin/src/main/java/org/apache/maven/plugins/surefire/dumppid/DumpPidMojo.java
----------------------------------------------------------------------
diff --cc surefire-integration-tests/src/test/resources/test-helper-dump-pid-plugin/src/main/java/org/apache/maven/plugins/surefire/dumppid/DumpPidMojo.java
index 5e70556,aa44b64..b010d22
--- a/surefire-integration-tests/src/test/resources/test-helper-dump-pid-plugin/src/main/java/org/apache/maven/plugins/surefire/dumppid/DumpPidMojo.java
+++ b/surefire-integration-tests/src/test/resources/test-helper-dump-pid-plugin/src/main/java/org/apache/maven/plugins/surefire/dumppid/DumpPidMojo.java
@@@ -50,14 -51,11 +51,12 @@@ public class DumpPidMoj
              {
                  targetDir.mkdirs();
              }
 +
-             final String pid = ManagementFactory.getRuntimeMXBean().getName();
-             final File target = new File( targetDir, "maven.pid" ).getCanonicalFile();
              fw = new FileWriter( target );
 -            String pid = ManagementFactory.getRuntimeMXBean().getName();
++            final String pid = ManagementFactory.getRuntimeMXBean().getName();
              fw.write( pid );
 -            fw.flush();
 -
 +            fw.close();
 +            fw = null;
- 
              getLog().info( "Wrote " + pid + " to " + target );
          }
          catch ( IOException e )

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/67456544/surefire-integration-tests/src/test/resources/testng-testRunnerFactory/src/test/java/testng/testrunnerfactory/FileHelper.java
----------------------------------------------------------------------
diff --cc surefire-integration-tests/src/test/resources/testng-testRunnerFactory/src/test/java/testng/testrunnerfactory/FileHelper.java
index b72bfc6,5451dbf..b0a8e92
--- a/surefire-integration-tests/src/test/resources/testng-testRunnerFactory/src/test/java/testng/testrunnerfactory/FileHelper.java
+++ b/surefire-integration-tests/src/test/resources/testng-testRunnerFactory/src/test/java/testng/testrunnerfactory/FileHelper.java
@@@ -9,32 -8,31 +9,32 @@@ public class FileHelpe
  {
      public static void writeFile( String fileName, String content )
      {
 -        FileWriter out = null;
 +        Writer writer = null;
          try
          {
 -            File target = new File( System.getProperty("user.dir"), "target" ).getCanonicalFile();
 -            File listenerOutput = new File( target, fileName );
 -            out = new FileWriter( listenerOutput, true );
 -            out.write( content );
 -            out.flush();
 +            writer = new FileWriter( new File( new File( System.getProperty( "user.dir" ),
 +                                                         "target" ).getCanonicalFile(), fileName ), true );
 +
 +            writer.write( content );
 +            writer.close();
 +            writer = null;
          }
-         catch ( IOException exception )
+         catch ( IOException e )
          {
-             throw new RuntimeException( exception );
+             throw new RuntimeException( e );
          }
          finally
          {
-             try
 -            if ( out != null )
++            if ( writer != null )
              {
-                 if ( writer != null )
+                 try
                  {
 -                    out.close();
 +                    writer.close();
                  }
-             }
-             catch ( final IOException e )
-             {
-                 // Suppressed.
+                 catch ( IOException e )
+                 {
 -                    throw new RuntimeException( e );
++                    // Suppressed, so that the exception thrown in the try block will be propagated.
+                 }
              }
          }
      }