List<PsiClassType> (@NotNull PsiMethod method, @NotNull PsiSubstitutor substitutor, @NotNull PsiElement place) { PsiClassType[] referenceTypes = method.getThrowsList().getReferencedTypes(); if (referenceTypes.length == 0) return Collections.emptyList(); GlobalSearchScope scope = place.getResolveScope(); List<PsiClassType> result = new ArrayList<>(); for (PsiType type : referenceTypes) { type = PsiClassImplUtil.correctType(substitutor.substitute(type), scope); if (type instanceof PsiCapturedWildcardType) { type = ((PsiCapturedWildcardType)type).getUpperBound(); } if (type instanceof PsiClassType) { result.add((PsiClassType)type); } } return result; }