On Sat, 2 Mar 2024 01:40:39 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:

>>>  Q2: Can we use Files.deleteIfExists(path) in the finally block of the 
>>> run() method instead?
>> 
>> I don't think that changes anything. If run() throws an exception and then 
>> Files.deleteIfExists() throws an exception from the finally block, the 
>> original exception is lost.
>> 
>>> One more approach is to wrap run() call into the runHelper() method:
>> 
>> Same issue with potentially losing the original exception.
>
> Two variants:
> 
>     public void runHelper(CommandExecutor executor, String cmd, Path path) {
>        try {
>            run(executor, cmd, path);
>        } catch (Throwable t) {
>             t.printStackTrace(System.out);
>             throw t;
>        } finally {
>            Files.deleteIfExists(path);
>        }
>     }
> 
> or
> 
>     public void runHelper(CommandExecutor executor, String cmd, Path path) {
>        try {
>            run(executor, cmd, path);
>        } finally {
>            try {
>               Files.deleteIfExists(path);
>            } catch (Throwable t) {
>               <print message about exception thrown from deleteIfExists>
>               t.printStackTrace(System.out);
>            }
>        }
>     }

The one issue with the first variant is that when run() throws an exception, it 
will be printed twice, assuming deleteIfExists() does not throw an exception. 
Basically you either get the exception printed twice, or you get the exception 
printed once plus whatever exception deleteIfExists() throws also printed 
(which is ok).

I think your 2nd example will work, but it's kind of confusing because if you 
got into the finally block via an exception, you then might throw another 
exception, which is handled in the finally block, and then (implicitly) the 
original exception is rethrown as you exit the finally block. However, if there 
was no exception from run() but deleteIfExists() throws an exception, the 
exception is printed, but does not cause the test to fail. I don't think we 
want that.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/17992#discussion_r1509883828

Reply via email to