From f151fd0d9919eacf5079cc1d8a76a586858cbce1 Mon Sep 17 00:00:00 2001 From: Artemiy Sartakov Date: Tue, 8 Mar 2022 17:41:44 +0700 Subject: [PATCH] InlineToAnonymousClassHandler: run toAnonymousClass before superClass inline, check InlineToAnonymousClassHandler#canInlineElement in tests (IJ-CR-21450) GitOrigin-RevId: 611afbfe041fb69973fa2d1536336b59c7a97ce9 --- .../inline/InlineToAnonymousClassHandler.java | 4 ++-- java/java-impl/src/META-INF/JavaPlugin.xml | 4 ++-- .../{Sealed.java => SealedNoMembers.java} | 0 .../{Sealed.java.after => SealedNoMembers.java.after} | 0 .../inline/InlineToAnonymousClassMultifileTest.java | 1 + .../refactoring/inline/InlineToAnonymousClassTest.java | 9 +++++---- 6 files changed, 10 insertions(+), 8 deletions(-) rename java/java-tests/testData/refactoring/inlineToAnonymousClass/{Sealed.java => SealedNoMembers.java} (100%) rename java/java-tests/testData/refactoring/inlineToAnonymousClass/{Sealed.java.after => SealedNoMembers.java.after} (100%) diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/inline/InlineToAnonymousClassHandler.java b/java/java-impl-refactorings/src/com/intellij/refactoring/inline/InlineToAnonymousClassHandler.java index 81446aa6f859..662fe8e99bcc 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/inline/InlineToAnonymousClassHandler.java +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/inline/InlineToAnonymousClassHandler.java @@ -60,8 +60,8 @@ public class InlineToAnonymousClassHandler extends JavaInlineActionHandler { if (element instanceof PsiAnonymousClass) return false; PsiClass psiClass = (PsiClass)element; if (hasInheritors(psiClass)) return false; - boolean hasMethods = PsiTreeUtil.findChildOfType(psiClass, PsiMember.class) != null; - return !hasMethods || !SealedUtils.hasSealedParent(psiClass); + boolean hasMembers = PsiTreeUtil.findChildOfType(psiClass, PsiMember.class) != null; + return !hasMembers || !SealedUtils.hasSealedParent(psiClass); } private static boolean hasInheritors(final PsiClass element) { diff --git a/java/java-impl/src/META-INF/JavaPlugin.xml b/java/java-impl/src/META-INF/JavaPlugin.xml index 0c2cf901beee..dcc7fedd86ac 100644 --- a/java/java-impl/src/META-INF/JavaPlugin.xml +++ b/java/java-impl/src/META-INF/JavaPlugin.xml @@ -962,8 +962,8 @@ - - + + diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/Sealed.java b/java/java-tests/testData/refactoring/inlineToAnonymousClass/SealedNoMembers.java similarity index 100% rename from java/java-tests/testData/refactoring/inlineToAnonymousClass/Sealed.java rename to java/java-tests/testData/refactoring/inlineToAnonymousClass/SealedNoMembers.java diff --git a/java/java-tests/testData/refactoring/inlineToAnonymousClass/Sealed.java.after b/java/java-tests/testData/refactoring/inlineToAnonymousClass/SealedNoMembers.java.after similarity index 100% rename from java/java-tests/testData/refactoring/inlineToAnonymousClass/Sealed.java.after rename to java/java-tests/testData/refactoring/inlineToAnonymousClass/SealedNoMembers.java.after diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineToAnonymousClassMultifileTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineToAnonymousClassMultifileTest.java index f4b66ad32cfa..945d65c905ed 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineToAnonymousClassMultifileTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineToAnonymousClassMultifileTest.java @@ -77,6 +77,7 @@ public class InlineToAnonymousClassMultifileTest extends LightMultiFileTestCase PsiClass classToInline = myFixture.findClass(className); classToInline = (PsiClass)classToInline.getNavigationElement(); assertNull(InlineToAnonymousClassHandler.getCannotInlineMessage(classToInline)); + assertTrue(new InlineToAnonymousClassHandler().canInlineElement(classToInline)); InlineToAnonymousClassProcessor processor = new InlineToAnonymousClassProcessor(getProject(), classToInline, null, false, false, false); diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineToAnonymousClassTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineToAnonymousClassTest.java index 1a89b90eacbd..eb2d4db4157b 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineToAnonymousClassTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineToAnonymousClassTest.java @@ -255,7 +255,7 @@ public class InlineToAnonymousClassTest extends LightRefactoringTestCase { doTest(true, false); } - public void testSealed() { + public void testSealedNoMembers() { setLanguageLevel(LanguageLevel.JDK_16_PREVIEW); doTest(false, false); } @@ -442,7 +442,8 @@ public class InlineToAnonymousClassTest extends LightRefactoringTestCase { .findTargetElement(getEditor(), TargetElementUtil.ELEMENT_NAME_ACCEPTED | TargetElementUtil.REFERENCED_ELEMENT_ACCEPTED); PsiCall callToInline = InlineToAnonymousClassHandler.findCallToInline(getEditor()); PsiClass classToInline = (PsiClass) element; - assertEquals(null, InlineToAnonymousClassHandler.getCannotInlineMessage(classToInline)); + assertNull(InlineToAnonymousClassHandler.getCannotInlineMessage(classToInline)); + assertTrue(new InlineToAnonymousClassHandler().canInlineElement(element)); final InlineToAnonymousClassProcessor processor = new InlineToAnonymousClassProcessor(getProject(), classToInline, callToInline, inlineThisOnly, false, searchInNonJavaFiles); UsageInfo[] usages = processor.findUsages(); @@ -493,9 +494,9 @@ public class InlineToAnonymousClassTest extends LightRefactoringTestCase { .findTargetElement(getEditor(), TargetElementUtil.ELEMENT_NAME_ACCEPTED | TargetElementUtil.REFERENCED_ELEMENT_ACCEPTED); PsiCall callToInline = InlineToAnonymousClassHandler.findCallToInline(getEditor()); PsiClass classToInline = (PsiClass) element; - assertEquals(null, InlineToAnonymousClassHandler.getCannotInlineMessage(classToInline)); + assertNull(InlineToAnonymousClassHandler.getCannotInlineMessage(classToInline)); final PsiClassType superType = InlineToAnonymousClassProcessor.getSuperType(classToInline); - assertTrue(superType != null); + assertNotNull(superType); assertEquals(canBeInvokedOnReference, InlineToAnonymousClassHandler.canBeInvokedOnReference(callToInline, superType)); }