From 66a8aa11b8f50d08975d01290a26a8189bc358a6 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Thu, 7 Apr 2016 13:47:46 +0200 Subject: [PATCH] collect unhandled exceptions from enum constructor (IDEA-154283) --- .../daemon/impl/analysis/HighlightVisitorImpl.java | 1 + .../src/com/intellij/codeInsight/ExceptionUtil.java | 9 +++++++++ .../UnhandledErrorsFromEnumConstructors.java | 8 ++++++++ .../codeInsight/daemon/LightAdvHighlightingJdk6Test.java | 4 ++++ 4 files changed, 22 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/UnhandledErrorsFromEnumConstructors.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index 85824cd5e3d1..d532966d6797 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -490,6 +490,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh super.visitEnumConstant(enumConstant); if (!myHolder.hasErrorResults()) GenericsHighlightUtil.checkEnumConstantForConstructorProblems(enumConstant, myHolder, myJavaSdkVersion); if (!myHolder.hasErrorResults()) registerConstructorCall(enumConstant); + if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkUnhandledExceptions(enumConstant, null)); } @Override diff --git a/java/java-psi-impl/src/com/intellij/codeInsight/ExceptionUtil.java b/java/java-psi-impl/src/com/intellij/codeInsight/ExceptionUtil.java index cffd36569447..7903d606864e 100644 --- a/java/java-psi-impl/src/com/intellij/codeInsight/ExceptionUtil.java +++ b/java/java-psi-impl/src/com/intellij/codeInsight/ExceptionUtil.java @@ -367,6 +367,15 @@ public class ExceptionUtil { final List array = ContainerUtil.newArrayList(); final PsiElementVisitor visitor = new JavaRecursiveElementWalkingVisitor() { + @Override + public void visitEnumConstant(PsiEnumConstant enumConstant) { + final PsiMethod method = enumConstant.resolveMethod(); + if (method != null) { + addExceptions(array, getUnhandledExceptions(method, enumConstant, null, PsiSubstitutor.EMPTY)); + } + visitElement(enumConstant); + } + @Override public void visitCallExpression(@NotNull PsiCallExpression expression) { addExceptions(array, getUnhandledExceptions(expression, null)); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/UnhandledErrorsFromEnumConstructors.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/UnhandledErrorsFromEnumConstructors.java new file mode 100644 index 000000000000..21f3afe3ad4c --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting6/UnhandledErrorsFromEnumConstructors.java @@ -0,0 +1,8 @@ + +enum ABC { + A(), + B, + C; + ABC() throws java.io.IOException { + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java index d95f19993027..2b96a77777c6 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk6Test.java @@ -65,4 +65,8 @@ public class LightAdvHighlightingJdk6Test extends LightDaemonAnalyzerTestCase { public void testAssignmentFromStringToObject() { doTest(true, false); } + + public void testUnhandledErrorsFromEnumConstructors() { + doTest(true, false); + } }