RFR: 8285396: Do not fill in the stacktrace of an internal exception

Jonathan Gibbons jjg at openjdk.java.net
Thu Apr 21 20:37:24 UTC 2022

On Thu, 21 Apr 2022 19:28:08 GMT, Pavel Rappo <prappo at openjdk.org> wrote:

> Sometimes an exception is retrofitted into control flow to interrupt it in a way that it wasn't originally designed to be interrupted. Such an exception is an implementation detail. Once the exception is caught internally, it is discarded.
> An exception has a stacktrace. Filling in a stacktrace is not free. Filling in a stacktrace that won't be used seems like a waste.

The changes for the `UncheckedIOException` wrappers look OK, but might be even better if the code properly unwrapped the wrapper and simply rethrew the underlying cause. For example,


        } catch (UncheckedIOException ex) {
            throw new IOException(ex.getMessage(), ex);


        } catch (UncheckedIOException ex) {
            throw ex.getCause();

For the `TreePath` and `DocTreePath` `Result` exceptions, a better solution would be to add an opt-in short-circuiting mechanism info the scanner's `scanAndReduce` method, to avoid calling additional calls of `scan` once some condition has been met, like a non-null result.  This would completely avoid the need to throw an exception.


Changes requested by jjg (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/8347

More information about the compiler-dev mailing list