This commit is contained in:
Anna.Kozlova
2017-10-10 20:34:20 +02:00
parent 7129156c77
commit 497ff23b93
@@ -129,10 +129,11 @@ public class PsiCatchSectionImpl extends CompositePsiElement implements PsiCatch
List<PsiType> types = new ArrayList<>();
for (PsiType type : uncaughtTypes) {
if (declaredType.isAssignableFrom(type) ||
// from 11.2.3 exception checking
// It is a compile-time error if a catch clause can catch checked exception class E1 and it is not the case that the try block corresponding to the catch clause can
// throw a checked exception class that is a subclass or superclass of E1, unless E1 is Exception or a superclass of Exception.
// so here unchecked exception can sneak throw Exception or Throwable catch type only
// JLS 11.2.3 "Exception Checking":
// "It is a compile-time error if a catch clause can catch checked exception class E1 and it is not the case
// that the try block corresponding to the catch clause can throw a checked exception class that is
// a subclass or superclass of E1, unless E1 is Exception or a superclass of Exception."
// So here unchecked exception can sneak through Exception or Throwable catch type only.
ExceptionUtil.isGeneralExceptionType(declaredType) && type instanceof PsiClassType && ExceptionUtil.isUncheckedException((PsiClassType)type)) {
types.add(type);
}