diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java index 336077d79125..7cfe2cb889d4 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java @@ -1387,7 +1387,8 @@ public class HighlightUtil extends HighlightUtilBase { if (ExceptionUtil.isGeneralExceptionType(catchType)) continue; // collect exceptions which are caught by this type - Collection caught = ContainerUtil.findAll(thrownTypes, catchType::isAssignableFrom); + final Collection caught = + ContainerUtil.findAll(thrownTypes, type -> catchType.isAssignableFrom(type) || type.isAssignableFrom(catchType)); if (caught.isEmpty()) continue; final Collection caughtCopy = ContainerUtil.newHashSet(caught); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/CatchSubclassOfThrownException.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/CatchSubclassOfThrownException.java new file mode 100644 index 000000000000..76775d6508b2 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/CatchSubclassOfThrownException.java @@ -0,0 +1,23 @@ +class C { + void foo(boolean b) throws Exception { + try { + if (b) { + throw new ChildException(); + } else { + method(); + } + } catch (ChildException e) { + System.out.println("child"); + } catch (ParentException e) { + System.out.println("parent"); + } + } + + private static void method() throws Exception { + throw new ParentException(); + } + + static class ParentException extends Exception { } + + static class ChildException extends ParentException { } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingJdk7Test.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingJdk7Test.java index 39a11cde6e6c..3aa128dd35d9 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingJdk7Test.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingJdk7Test.java @@ -186,6 +186,7 @@ public class LightAdvHighlightingJdk7Test extends LightDaemonAnalyzerTestCase { public void testIDEA138978() { doTest(false, false); } public void testIntersectionTypeCast() { doTest(false, false); } public void testUsedMethodCalledViaReflectionInTheSameFile() { doTest(true, false); } + public void testCatchSubclassOfThrownException() { doTest(true, false); } public void testArrayInitializerTypeCheckVariableType() { doTest(false, false);}