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;