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 91aef5388557..910a0d80499c 100644 --- a/java/java-psi-impl/src/com/intellij/codeInsight/ExceptionUtil.java +++ b/java/java-psi-impl/src/com/intellij/codeInsight/ExceptionUtil.java @@ -799,14 +799,14 @@ public final class ExceptionUtil { public static HandlePlace getHandlePlace(@Nullable PsiElement element, @NotNull PsiClassType exceptionType, @Nullable PsiElement topElement) { - if (element == null || element.getParent() == topElement || element.getParent() == null) return HandlePlace.UNHANDLED; + if (element == null || element == topElement) return HandlePlace.UNHANDLED; + PsiElement parent = element.getParent(); + if (parent == null || parent == topElement) return HandlePlace.UNHANDLED; for (CustomExceptionHandler exceptionHandler : CustomExceptionHandler.KEY.getExtensionList()) { if (exceptionHandler.isHandled(element, exceptionType, topElement)) return HandlePlace.UNKNOWN; } - final PsiElement parent = element.getParent(); - if (parent instanceof PsiMethod) { PsiMethod method = (PsiMethod)parent; return HandlePlace.fromBoolean(isHandledByMethodThrowsClause(method, exceptionType)); diff --git a/java/java-tests/testData/refactoring/extractMethod/StringTemplateExceptionJava21Preview.java b/java/java-tests/testData/refactoring/extractMethod/StringTemplateExceptionJava21Preview.java new file mode 100644 index 000000000000..0c69ab3ea8a7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/StringTemplateExceptionJava21Preview.java @@ -0,0 +1,21 @@ +package java.lang; +public interface StringTemplate { + Processor STR = null; + + @PreviewFeature(feature=PreviewFeature.Feature.STRING_TEMPLATES) + @FunctionalInterface + public interface Processor { + R process(StringTemplate stringTemplate) throws E; + } +} +class Main { + + class FailureException extends Exception {} + + public static void x(StringTemplate.Processor p, int i, int j) { + try { + String t = p."\{i} + \{j} = \{i + j}"; + } + catch (FailureException ignore) {} + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethod/StringTemplateExceptionJava21Preview_after.java b/java/java-tests/testData/refactoring/extractMethod/StringTemplateExceptionJava21Preview_after.java new file mode 100644 index 000000000000..0a4af344b6f7 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/StringTemplateExceptionJava21Preview_after.java @@ -0,0 +1,25 @@ +package java.lang; +public interface StringTemplate { + Processor STR = null; + + @PreviewFeature(feature=PreviewFeature.Feature.STRING_TEMPLATES) + @FunctionalInterface + public interface Processor { + R process(StringTemplate stringTemplate) throws E; + } +} +class Main { + + class FailureException extends Exception {} + + public static void x(StringTemplate.Processor p, int i, int j) { + try { + String t = newMethod(p, i, j); + } + catch (FailureException ignore) {} + } + + private static String newMethod(StringTemplate.Processor p, int i, int j) throws FailureException { + return p."\{i} + \{j} = \{i + j}"; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethod/StringTemplate.java b/java/java-tests/testData/refactoring/extractMethod/StringTemplateJava21Preview.java similarity index 100% rename from java/java-tests/testData/refactoring/extractMethod/StringTemplate.java rename to java/java-tests/testData/refactoring/extractMethod/StringTemplateJava21Preview.java diff --git a/java/java-tests/testData/refactoring/extractMethod/StringTemplate_after.java b/java/java-tests/testData/refactoring/extractMethod/StringTemplateJava21Preview_after.java similarity index 100% rename from java/java-tests/testData/refactoring/extractMethod/StringTemplate_after.java rename to java/java-tests/testData/refactoring/extractMethod/StringTemplateJava21Preview_after.java diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java index 13419c0dc15a..82860f9f880e 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodTest.java @@ -262,8 +262,12 @@ public class ExtractMethodTest extends LightJavaCodeInsightTestCase { doTestWithJava17(); } - public void testStringTemplate() throws Exception { - doTestWithLanguageLevel(LanguageLevel.JDK_21_PREVIEW); + public void testStringTemplateJava21Preview() throws Exception { + doTest(); + } + + public void testStringTemplateExceptionJava21Preview() throws Exception { + doTest(); } private void doTestWithJava17() throws Exception {