From 283d54c49b2a3e811f33fee2399b6e2fbf89ea5b Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 3 Jun 2022 12:19:34 +0200 Subject: [PATCH] [java-inspections] Fix handling unreachable statements after try (IDEA-226599) GitOrigin-RevId: 206f9f82c377ed1301986585f20d4b0fc7c99a30 --- .../daemon/impl/quickfix/DeleteCatchFix.java | 5 +++-- .../charsetObjectCanBeUsed/afterStringUUE3.java | 9 +++++++++ .../charsetObjectCanBeUsed/beforeStringUUE3.java | 13 +++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/inspection/charsetObjectCanBeUsed/afterStringUUE3.java create mode 100644 java/java-tests/testData/inspection/charsetObjectCanBeUsed/beforeStringUUE3.java diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/DeleteCatchFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/DeleteCatchFix.java index f9b7a1bafa71..5f57680afdc4 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/DeleteCatchFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/DeleteCatchFix.java @@ -90,8 +90,9 @@ public class DeleteCatchFix implements IntentionActionWithFixAllOption { boolean mayCompleteNormally = ControlFlowUtils.codeBlockMayCompleteNormally(tryBlock); if (!mayCompleteNormally) { PsiElement nextElement = PsiTreeUtil.skipWhitespacesAndCommentsForward(tryStatement.getNextSibling()); - PsiElement lastElement = PsiTreeUtil.skipWhitespacesAndCommentsBackward(((PsiCodeBlock)tryParent).getRBrace()); - if (nextElement != null && lastElement != null) { + PsiJavaToken rBrace = ((PsiCodeBlock)tryParent).getRBrace(); + PsiElement lastElement = PsiTreeUtil.skipWhitespacesAndCommentsBackward(rBrace); + if (nextElement != null && lastElement != null && nextElement != rBrace) { tryParent.deleteChildRange(nextElement, lastElement); } } diff --git a/java/java-tests/testData/inspection/charsetObjectCanBeUsed/afterStringUUE3.java b/java/java-tests/testData/inspection/charsetObjectCanBeUsed/afterStringUUE3.java new file mode 100644 index 000000000000..f96ee0d387d7 --- /dev/null +++ b/java/java-tests/testData/inspection/charsetObjectCanBeUsed/afterStringUUE3.java @@ -0,0 +1,9 @@ +// "Replace with 'cs'" "true" +import java.nio.charset.*; +import java.io.UnsupportedEncodingException; + +class X { + byte[] convert(String str, Charset cs) { + return str.getBytes(cs); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/charsetObjectCanBeUsed/beforeStringUUE3.java b/java/java-tests/testData/inspection/charsetObjectCanBeUsed/beforeStringUUE3.java new file mode 100644 index 000000000000..05c9ed866e9a --- /dev/null +++ b/java/java-tests/testData/inspection/charsetObjectCanBeUsed/beforeStringUUE3.java @@ -0,0 +1,13 @@ +// "Replace with 'cs'" "true" +import java.nio.charset.*; +import java.io.UnsupportedEncodingException; + +class X { + byte[] convert(String str, Charset cs) { + try { + return str.getBytes(cs.name()); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } +} \ No newline at end of file