From fc4f8118d2abc4efb20d7668d7879991d3b83d3d Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 17 Nov 2023 12:31:11 +0100 Subject: [PATCH] [java-refactoring] IDEA-338428 Inline pattern variable doesn't work when it's located in nested condition GitOrigin-RevId: 158e71c18441ffd56eebabe107899b95ac4ac15d --- java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java | 3 +++ .../inlinePatternVariable/InNestedCondition.java | 7 +++++++ .../inlinePatternVariable/InNestedCondition.java.after | 7 +++++++ .../java/refactoring/inline/InlinePatternVariableTest.java | 1 + 4 files changed, 18 insertions(+) create mode 100644 java/java-tests/testData/refactoring/inlinePatternVariable/InNestedCondition.java create mode 100644 java/java-tests/testData/refactoring/inlinePatternVariable/InNestedCondition.java.after diff --git a/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java b/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java index ab1f8b074935..c8e8756b010e 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java @@ -306,6 +306,9 @@ public final class PsiUtil extends PsiUtilCore { PsiElement codeBlock = null; if (variable instanceof PsiParameter) { PsiElement declarationScope = ((PsiParameter)variable).getDeclarationScope(); + if (variable instanceof PsiPatternVariable) { + return declarationScope; + } if (declarationScope instanceof PsiCatchSection) { codeBlock = ((PsiCatchSection)declarationScope).getCatchBlock(); } diff --git a/java/java-tests/testData/refactoring/inlinePatternVariable/InNestedCondition.java b/java/java-tests/testData/refactoring/inlinePatternVariable/InNestedCondition.java new file mode 100644 index 000000000000..4e826eaa9bd0 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlinePatternVariable/InNestedCondition.java @@ -0,0 +1,7 @@ +class Test { + void test(Object obj) { + if (Math.random() > 0.5 || (obj instanceof String s && s.isEmpty())) { + System.out.println(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlinePatternVariable/InNestedCondition.java.after b/java/java-tests/testData/refactoring/inlinePatternVariable/InNestedCondition.java.after new file mode 100644 index 000000000000..7d3e1bde93b6 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlinePatternVariable/InNestedCondition.java.after @@ -0,0 +1,7 @@ +class Test { + void test(Object obj) { + if (Math.random() > 0.5 || (obj instanceof String && ((String) obj).isEmpty())) { + System.out.println(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlinePatternVariableTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlinePatternVariableTest.java index 3fbac3d5f5c7..cc13416657c8 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlinePatternVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlinePatternVariableTest.java @@ -22,6 +22,7 @@ public class InlinePatternVariableTest extends LightJavaCodeInsightTestCase { public void testSimple() { doTest(); } public void testSimpleAtRef() { doTest(); } public void testTernary() { doTest(); } + public void testInNestedCondition() { doTest(); } @Override protected @NotNull LightProjectDescriptor getProjectDescriptor() {