diff --git a/openapi/src/com/intellij/psi/PsiCodeFragment.java b/openapi/src/com/intellij/psi/PsiCodeFragment.java index 2f738e12c923..b2ed3260d382 100644 --- a/openapi/src/com/intellij/psi/PsiCodeFragment.java +++ b/openapi/src/com/intellij/psi/PsiCodeFragment.java @@ -16,6 +16,9 @@ public interface PsiCodeFragment extends PsiFile { void setVisibilityChecker(VisibilityChecker checker); VisibilityChecker getVisibilityChecker(); + void setExceptionHandler(ExceptionHandler checker); + ExceptionHandler getExceptionHandler(); + interface VisibilityChecker { Visibility isDeclarationVisible(PsiElement declaration, PsiElement place); @@ -35,4 +38,8 @@ public interface PsiCodeFragment extends PsiFile { } } } + + interface ExceptionHandler { + boolean isHandledException(PsiClassType exceptionType); + } } diff --git a/source/com/intellij/codeInsight/ExceptionUtil.java b/source/com/intellij/codeInsight/ExceptionUtil.java index ae1d6f47ac2f..c7bba8e53581 100644 --- a/source/com/intellij/codeInsight/ExceptionUtil.java +++ b/source/com/intellij/codeInsight/ExceptionUtil.java @@ -408,6 +408,11 @@ public class ExceptionUtil { return isHandled(parent, exceptionType, topElement); } } + else if (parent instanceof PsiCodeFragment) { + PsiCodeFragment codeFragment = (PsiCodeFragment)parent; + if (codeFragment.getExceptionHandler() == null) return false; + return codeFragment.getExceptionHandler().isHandledException(exceptionType); + } else if (parent instanceof JspFile) { return true; } diff --git a/source/com/intellij/psi/impl/source/PsiCodeFragmentImpl.java b/source/com/intellij/psi/impl/source/PsiCodeFragmentImpl.java index e88f447cd883..6b8e49d75fe9 100644 --- a/source/com/intellij/psi/impl/source/PsiCodeFragmentImpl.java +++ b/source/com/intellij/psi/impl/source/PsiCodeFragmentImpl.java @@ -28,6 +28,7 @@ public class PsiCodeFragmentImpl extends PsiFileImpl implements PsiCodeFragment, private PsiType myThisType; private LinkedHashMap myPseudoImports = new LinkedHashMap(); private VisibilityChecker myVisibilityChecker; + private ExceptionHandler myExceptionHandler; public PsiCodeFragmentImpl(Project project, IElementType contentElementType, @@ -248,4 +249,12 @@ public class PsiCodeFragmentImpl extends PsiFileImpl implements PsiCodeFragment, return new DocumentReference[]{DocumentReferenceByDocument.createDocumentReference(document)}; } } + + public ExceptionHandler getExceptionHandler() { + return myExceptionHandler; + } + + public void setExceptionHandler(final ExceptionHandler exceptionHandler) { + myExceptionHandler = exceptionHandler; + } }