Loosen checking of unreachable suppressed exceptions in try-with-resources

Nikita An. Sokolov faucct at yandex-team.ru
Thu Oct 7 10:18:25 UTC 2021


(jep-submit at openjdk.java.net <mailto:jep-submit at openjdk.java.net> is unknown, so I am sending this proposal here)

Summary
-------

Do not require to catch checked exceptions from closed resources when they are being suppressed by an unconditional throw inside try-block body.

Success Metrics
---------------

Method fileInputStream should compile and not require to handle IOException from closing fileInputStream, as it will always be suppressed by rethrown RuntimeException:

```
FileInputStream fileInputStream(File file) throws FileNotFoundException {
  final var fileInputStream = new FileInputStream(file);
  try {
      checkSomething();
  } catch (Exception e) {
      try (fileInputStream) {
          throw e;
      }
  }
  return fileInputStream;
}

void checkSomething() {
  throw new RuntimeException();
}
```

Motivation
----------

This would let skipping unreachable catch sections.

Description
-----------

I guess this would only require changes in Java compiler.

Risks and Assumptions
---------------------

This change might require to delete unreachable catch blocks in some existing code. To smooth this change such blocks may be allowed, maybe producing a warning.



More information about the amber-dev mailing list