From 924c40f58db24085b1535cfdb581d24776491951 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Tue, 15 Feb 2011 21:10:27 +0100 Subject: [PATCH] Multi-catch support: resolve to fields --- .../advHighlighting7/MultiCatch.java | 4 ++-- java/openapi/src/com/intellij/psi/util/PsiUtil.java | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/MultiCatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/MultiCatch.java index 2ef2bf65f1dc..69cf037ebaae 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/MultiCatch.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/MultiCatch.java @@ -1,6 +1,6 @@ abstract class C { private static class NE { } - private static class E extends Exception { } + private static class E extends Exception { public String s; } private static class E1 extends E { } private static class E2 extends E { } private static class E3 extends E { } @@ -14,7 +14,7 @@ abstract class C { void m() { try { f(); } catch (E1 | E2 e) { } - try { f(); } catch (E2 | E e) { e.printStackTrace(); } + try { f(); } catch (E2 | E e) { e.printStackTrace(); System.out.println(e.s); } try { f(); } catch (E2 | E1 e) { } catch (E e) { } catch (RE e) { } try { f(); } catch (E1 | E e) { E ee = e; } try { g(); } catch (IE1 | IE2 e) { E ee = e; I ii = e; } diff --git a/java/openapi/src/com/intellij/psi/util/PsiUtil.java b/java/openapi/src/com/intellij/psi/util/PsiUtil.java index befbbda05869..f34dfee9b11d 100644 --- a/java/openapi/src/com/intellij/psi/util/PsiUtil.java +++ b/java/openapi/src/com/intellij/psi/util/PsiUtil.java @@ -98,6 +98,12 @@ public final class PsiUtil extends PsiUtilBase { if (type instanceof PsiClassType) { return ((PsiClassType)type).resolveGenerics(); } + if (type instanceof PsiDisjunctionType) { + final PsiType lub = ((PsiDisjunctionType)type).getLeastUpperBound(); + if (lub instanceof PsiClassType) { + return ((PsiClassType)lub).resolveGenerics(); + } + } if (type == null && expression instanceof PsiReferenceExpression) { JavaResolveResult resolveResult = ((PsiReferenceExpression)expression).advancedResolve(false); if (resolveResult.getElement() instanceof PsiClass) { @@ -388,6 +394,12 @@ public final class PsiUtil extends PsiUtilBase { if (type instanceof PsiArrayType) { return resolveGenericsClassInType(((PsiArrayType) type).getComponentType()); } + if (type instanceof PsiDisjunctionType) { + final PsiType lub = ((PsiDisjunctionType)type).getLeastUpperBound(); + if (lub instanceof PsiClassType) { + return ((PsiClassType)lub).resolveGenerics(); + } + } return PsiClassType.ClassResolveResult.EMPTY; }