diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9NonAccessibleTypeExposedInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9NonAccessibleTypeExposedInspection.java index 42ce038b8ce9..44d0476d689d 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9NonAccessibleTypeExposedInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9NonAccessibleTypeExposedInspection.java @@ -86,6 +86,12 @@ public class Java9NonAccessibleTypeExposedInspection extends BaseJavaLocalInspec for (PsiParameter parameter : method.getParameterList().getParameters()) { checkType(parameter.getType(), parameter.getTypeElement()); } + for (PsiJavaCodeReferenceElement referenceElement : method.getThrowsList().getReferenceElements()) { + PsiElement resolved = referenceElement.resolve(); + if (resolved instanceof PsiClass) { + checkType((PsiClass)resolved, referenceElement); + } + } } } @@ -121,9 +127,13 @@ public class Java9NonAccessibleTypeExposedInspection extends BaseJavaLocalInspec private void checkType(@Nullable PsiType type, @Nullable PsiTypeElement typeElement) { if (typeElement != null) { PsiClass psiClass = PsiUtil.resolveClassInType(type); - if (psiClass != null && isInModuleSource(psiClass) && !isModulePublicApi(psiClass)) { - myHolder.registerProblem(typeElement, CLASS_IS_NOT_EXPORTED); - } + checkType(psiClass, typeElement); + } + } + + private void checkType(PsiClass psiClass, @NotNull PsiElement typeElement) { + if (psiClass != null && isInModuleSource(psiClass) && !isModulePublicApi(psiClass)) { + myHolder.registerProblem(typeElement, CLASS_IS_NOT_EXPORTED); } } diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/Java9NonAccessibleTypeExposedTest.kt b/java/java-tests/testSrc/com/intellij/codeInspection/Java9NonAccessibleTypeExposedTest.kt index 9961aa509e4b..0caaef127bdf 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/Java9NonAccessibleTypeExposedTest.kt +++ b/java/java-tests/testSrc/com/intellij/codeInspection/Java9NonAccessibleTypeExposedTest.kt @@ -197,6 +197,23 @@ public class Highlighted { """) } + fun testThrows() { + add("apiPkg", "PublicException", "public class PublicException extends Exception {}") + add("apiPkg", "PackageLocalException", "class PackageLocalException extends Exception {}") + add("otherPkg", "OtherException", "public class OtherException extends Exception {}") + add("implPkg", "NotExportedException", "public class NotExportedException extends Exception {}") + highlight("""package apiPkg; +import otherPkg.*; +import implPkg.*; +public class Highlighted { + public void throwsPublic() throws PublicException {} + public void throwsPackageLocal() throws PackageLocalException {} + public void throwsOther() throws OtherException {} + public void throwsNotExported() throws NotExportedException {} +} +""") + } + fun testPublicAnnotation() { add("apiPkg", "MyAnnotation", "public @interface MyAnnotation {}") highlight("""package apiPkg;