From dc51016e34decc708f3ab8da93bea2805620bd92 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 26 Oct 2020 13:03:37 +0100 Subject: [PATCH] java: create class from usage: fix for patterns expression (IDEA-253733) GitOrigin-RevId: e135c45026fc852ace913a57689380c5175f766e --- .../impl/quickfix/CreateClassFromUsageBaseFix.java | 5 +++-- .../createInnerClassFromUsage/afterInstanceof.java | 9 +++++++++ .../createInnerClassFromUsage/beforeInstanceof.java | 6 ++++++ 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterInstanceof.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeInstanceof.java diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassFromUsageBaseFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassFromUsageBaseFix.java index 4042295af3ce..8973c26423ad 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassFromUsageBaseFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassFromUsageBaseFix.java @@ -65,10 +65,11 @@ public abstract class CreateClassFromUsageBaseFix extends BaseIntentionAction { parent.getParent() instanceof PsiVariable || parent.getParent() instanceof PsiMethod || parent.getParent() instanceof PsiClassObjectAccessExpression || - parent.getParent() instanceof PsiTypeCastExpression || - (parent.getParent() instanceof PsiInstanceOfExpression && ((PsiInstanceOfExpression)parent.getParent()).getCheckType() == parent)) { + parent.getParent() instanceof PsiTypeCastExpression) { return true; } + PsiInstanceOfExpression instanceOfExpression = PsiTreeUtil.getParentOfType(parent, PsiInstanceOfExpression.class); + if (instanceOfExpression != null && instanceOfExpression.getCheckType() == parent) return true; } else if (parent instanceof PsiReferenceList) { if (myKind == CreateClassKind.ENUM || myKind == CreateClassKind.RECORD) return false; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterInstanceof.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterInstanceof.java new file mode 100644 index 000000000000..f557d06adfd6 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/afterInstanceof.java @@ -0,0 +1,9 @@ +// "Create inner class 'Foo'" "true" +public class Test { + boolean foo(Object o) { + return o instanceof Foo; + } + + private class Foo { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeInstanceof.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeInstanceof.java new file mode 100644 index 000000000000..5031200d60c8 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createInnerClassFromUsage/beforeInstanceof.java @@ -0,0 +1,6 @@ +// "Create inner class 'Foo'" "true" +public class Test { + boolean foo(Object o) { + return o instanceof Foo; + } +} \ No newline at end of file