You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2016/12/21 06:25:56 UTC

[2/3] ant git commit: don't hide original exception by throwing a new one from finally

don't hide original exception by throwing a new one from finally


Project: http://git-wip-us.apache.org/repos/asf/ant/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/6c8b3542
Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/6c8b3542
Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/6c8b3542

Branch: refs/heads/master
Commit: 6c8b3542fdfd2a43e9ca9de9191b5df8bd846160
Parents: 7ffc097
Author: Stefan Bodewig <bo...@apache.org>
Authored: Wed Dec 21 07:25:00 2016 +0100
Committer: Stefan Bodewig <bo...@apache.org>
Committed: Wed Dec 21 07:25:00 2016 +0100

----------------------------------------------------------------------
 .../tools/ant/input/DefaultInputHandler.java    |  8 +++++--
 .../ant/taskdefs/optional/junit/JUnitTask.java  | 12 +++++++---
 .../junit/PlainJUnitResultFormatter.java        |  6 ++++-
 .../ant/taskdefs/optional/net/RExecTask.java    | 10 +++++++--
 .../ant/taskdefs/optional/net/TelnetTask.java   | 10 +++++++--
 .../apache/tools/ant/taskdefs/rmic/SunRmic.java |  8 ++++++-
 .../types/selectors/ContainsRegexpSelector.java |  9 +++++---
 .../tools/ant/util/SymbolicLinkUtils.java       | 23 +++++++++++++-------
 8 files changed, 64 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant/blob/6c8b3542/src/main/org/apache/tools/ant/input/DefaultInputHandler.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/input/DefaultInputHandler.java b/src/main/org/apache/tools/ant/input/DefaultInputHandler.java
index 548ebff..164505f 100644
--- a/src/main/org/apache/tools/ant/input/DefaultInputHandler.java
+++ b/src/main/org/apache/tools/ant/input/DefaultInputHandler.java
@@ -48,6 +48,7 @@ public class DefaultInputHandler implements InputHandler {
     public void handleInput(InputRequest request) throws BuildException {
         String prompt = getPrompt(request);
         BufferedReader r = null;
+        boolean success = false;
         try {
             r = new BufferedReader(new InputStreamReader(getInputStream()));
             do {
@@ -61,12 +62,15 @@ public class DefaultInputHandler implements InputHandler {
                                              + " Console.", e);
                 }
             } while (!request.isInputValid());
+            success = true;
         } finally {
             if (r != null) {
                 try {
                     r.close();
                 } catch (IOException e) {
-                    throw new BuildException("Failed to close input.", e);
+                    if (success) { // don't hide inner exception
+                        throw new BuildException("Failed to close input.", e); //NOSONAR
+                    }
                 }
             }
         }
@@ -117,4 +121,4 @@ public class DefaultInputHandler implements InputHandler {
     protected InputStream getInputStream() {
         return KeepAliveInputStream.wrapSystemIn();
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/6c8b3542/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
index 5c78115..a9e1662 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
@@ -1279,8 +1279,10 @@ public class JUnitTask extends Task {
         checkForkedPath(cmd);
 
         final TestResultHolder result = new TestResultHolder();
+        boolean success = false;
         try {
             result.exitCode = execute.execute();
+            success = true;
         } catch (final IOException e) {
             throw new BuildException("Process fork failed.", e, getLocation());
         } finally {
@@ -1322,9 +1324,13 @@ public class JUnitTask extends Task {
             }
 
             if (!FILE_UTILS.tryHardToDelete(propsFile)) {
-                throw new BuildException("Could not delete temporary "
-                                         + "properties file '"
-                                         + propsFile.getAbsolutePath() + "'.");
+                String msg = "Could not delete temporary properties file '"
+                    + propsFile.getAbsolutePath() + "'.";
+                if (success) {
+                    throw new BuildException(msg); //NOSONAR
+                } else { // don't hide inner exception
+                    log(msg, Project.MSG_ERR);
+                }
             }
         }
 

http://git-wip-us.apache.org/repos/asf/ant/blob/6c8b3542/src/main/org/apache/tools/ant/taskdefs/optional/junit/PlainJUnitResultFormatter.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/PlainJUnitResultFormatter.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/PlainJUnitResultFormatter.java
index 3386ee5..07264b7 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/PlainJUnitResultFormatter.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/PlainJUnitResultFormatter.java
@@ -117,6 +117,7 @@ public class PlainJUnitResultFormatter implements JUnitResultFormatter, IgnoredT
      * @throws BuildException if unable to write the output
      */
     public void endTestSuite(JUnitTest suite) throws BuildException {
+        boolean success = false;
         try {
             StringBuffer sb = new StringBuffer("Tests run: ");
             sb.append(suite.runCount());
@@ -158,12 +159,15 @@ public class PlainJUnitResultFormatter implements JUnitResultFormatter, IgnoredT
                     throw new BuildException("Unable to write output", ioex);
                 }
             }
+            success = true;
         } finally {
             if (out != null) {
                 try {
                     wri.close();
                 } catch (IOException ioex) {
-                    throw new BuildException("Unable to flush output", ioex);
+                    if (success) {
+                        throw new BuildException("Unable to flush output", ioex); //NOSONAR
+                    }
                 } finally {
                     if (out != System.out && out != System.err) {
                         FileUtils.close(out);

http://git-wip-us.apache.org/repos/asf/ant/blob/6c8b3542/src/main/org/apache/tools/ant/taskdefs/optional/net/RExecTask.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/net/RExecTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/net/RExecTask.java
index 01cb4ba..61d6e3d 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/net/RExecTask.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/net/RExecTask.java
@@ -354,6 +354,7 @@ public class RExecTask extends Task {
 
         /**  Create the telnet client object */
         AntRExecClient rexec = null;
+        boolean success = false;
         try {
             rexec = new AntRExecClient();
             try {
@@ -372,6 +373,7 @@ public class RExecTask extends Task {
 
             /** Keep reading input stream until end of it or time-out */
             rexec.waitForEOF(defaultTimeout);
+            success = true;
         } catch (IOException e) {
             throw new BuildException("Error r-executing command", e);
         } finally {
@@ -379,8 +381,12 @@ public class RExecTask extends Task {
                 try {
                     rexec.disconnect();
                 } catch (IOException e) {
-                    throw new BuildException("Error disconnecting from "
-                                             + server);
+                    String msg = "Error disconnecting from " + server;
+                    if (success) {
+                        throw new BuildException(msg); //NOSONAR
+                    } else { // don't hide inner exception
+                        log(msg, Project.MSG_ERR);
+                    }
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/ant/blob/6c8b3542/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java
index 82625fa..2bd2205 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java
@@ -98,6 +98,7 @@ public class TelnetTask extends Task {
 
        /**  Create the telnet client object */
        AntTelnetClient telnet = null;
+       boolean success = false;
        try {
            telnet = new AntTelnetClient();
            try {
@@ -118,13 +119,18 @@ public class TelnetTask extends Task {
                }
                task.execute(telnet);
            }
+           success = true;
        } finally {
            if (telnet != null && telnet.isConnected()) {
                try {
                    telnet.disconnect();
                } catch (IOException e) {
-                   throw new BuildException("Error disconnecting from "
-                                            + server);
+                    String msg = "Error disconnecting from " + server;
+                    if (success) {
+                        throw new BuildException(msg); //NOSONAR
+                    } else { // don't hide inner exception
+                        log(msg, Project.MSG_ERR);
+                    }
                }
            }
        }

http://git-wip-us.apache.org/repos/asf/ant/blob/6c8b3542/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java b/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java
index 1b5e67d..7281252 100644
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java
+++ b/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java
@@ -75,6 +75,7 @@ public class SunRmic extends DefaultRmicAdapter {
         LogOutputStream logstr = new LogOutputStream(getRmic(),
                                                      Project.MSG_WARN);
 
+        boolean success = false;
         try {
             Class c = Class.forName(RMIC_CLASSNAME);
             Constructor cons
@@ -86,6 +87,7 @@ public class SunRmic extends DefaultRmicAdapter {
             Boolean ok =
                 (Boolean) doRmic.invoke(rmic,
                                        (new Object[] {cmd.getArguments()}));
+            success = true;
             return ok.booleanValue();
         } catch (ClassNotFoundException ex) {
             if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) {
@@ -105,7 +107,11 @@ public class SunRmic extends DefaultRmicAdapter {
             try {
                 logstr.close();
             } catch (IOException e) {
-                throw new BuildException(e);
+                // swallow if there was an error before so that
+                // original error will be passed up
+                if (success) {
+                    throw new BuildException(e); //NOSONAR
+                }
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/ant/blob/6c8b3542/src/main/org/apache/tools/ant/types/selectors/ContainsRegexpSelector.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/types/selectors/ContainsRegexpSelector.java b/src/main/org/apache/tools/ant/types/selectors/ContainsRegexpSelector.java
index 334f37e..7140b97 100644
--- a/src/main/org/apache/tools/ant/types/selectors/ContainsRegexpSelector.java
+++ b/src/main/org/apache/tools/ant/types/selectors/ContainsRegexpSelector.java
@@ -189,6 +189,7 @@ public class ContainsRegexpSelector extends BaseExtendSelector
             throw new BuildException("Could not get InputStream from "
                     + r.toLongString(), e);
         }
+        boolean success = false;
         try {
             teststr = in.readLine();
 
@@ -202,7 +203,7 @@ public class ContainsRegexpSelector extends BaseExtendSelector
                 }
                 teststr = in.readLine();
             }
-
+            success = true;
             return false;
         } catch (IOException ioe) {
             throw new BuildException("Could not read " + r.toLongString());
@@ -210,8 +211,10 @@ public class ContainsRegexpSelector extends BaseExtendSelector
             try {
                 in.close();
             } catch (Exception e) {
-                throw new BuildException("Could not close "
-                                         + r.toLongString());
+                if (success) {
+                    throw new BuildException("Could not close " //NOSONAR
+                                             + r.toLongString());
+                }
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/ant/blob/6c8b3542/src/main/org/apache/tools/ant/util/SymbolicLinkUtils.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/util/SymbolicLinkUtils.java b/src/main/org/apache/tools/ant/util/SymbolicLinkUtils.java
index 3bc9918..62b7a3f 100644
--- a/src/main/org/apache/tools/ant/util/SymbolicLinkUtils.java
+++ b/src/main/org/apache/tools/ant/util/SymbolicLinkUtils.java
@@ -254,6 +254,7 @@ public class SymbolicLinkUtils {
             }
 
             boolean renamedTarget = false;
+            boolean success = false;
             try {
                 try {
                     FILE_UTILS.rename(target, temp);
@@ -270,20 +271,26 @@ public class SymbolicLinkUtils {
                                           + " (was it a real file? is this "
                                           + "not a UNIX system?)");
                 }
+                success = true;
             } finally {
                 if (renamedTarget) {
                     // return the resource to its original name:
                     try {
                         FILE_UTILS.rename(temp, target);
                     } catch (final IOException e) {
-                        throw new IOException("Couldn't return resource "
-                                              + temp
-                                              + " to its original name: "
-                                              + target.getAbsolutePath()
-                                              + ". Reason: " + e.getMessage()
-                                              + "\n THE RESOURCE'S NAME ON DISK"
-                                              + " HAS BEEN CHANGED BY THIS"
-                                              + " ERROR!\n");
+                        String msg = "Couldn't return resource "
+                            + temp
+                            + " to its original name: "
+                            + target.getAbsolutePath()
+                            + ". Reason: " + e.getMessage()
+                            + "\n THE RESOURCE'S NAME ON DISK"
+                            + " HAS BEEN CHANGED BY THIS"
+                            + " ERROR!\n";
+                        if (success) {
+                            throw new IOException(msg); //NOSONAR
+                        } else {
+                            System.err.println(msg);
+                        }
                     }
                 }
             }