InlineToAnonymousClassHandler: run toAnonymousClass before superClass inline, check InlineToAnonymousClassHandler#canInlineElement in tests (IJ-CR-21450)

GitOrigin-RevId: 611afbfe041fb69973fa2d1536336b59c7a97ce9
This commit is contained in:
Artemiy Sartakov
2022-03-08 11:44:40 +00:00
committed by intellij-monorepo-bot
parent d2bf3cf8ab
commit f151fd0d99
6 changed files with 10 additions and 8 deletions
@@ -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) {
+2 -2
View File
@@ -962,8 +962,8 @@
<inlineActionHandler implementation="com.intellij.refactoring.inline.InlineConstantFieldHandler"/>
<inlineActionHandler implementation="com.intellij.refactoring.inline.InlineLocalHandler"/>
<inlineActionHandler implementation="com.intellij.refactoring.inline.InlineMethodHandler"/>
<inlineActionHandler implementation="com.intellij.refactoring.inlineSuperClass.InlineSuperClassRefactoringHandler"/>
<inlineActionHandler implementation="com.intellij.refactoring.inline.InlineToAnonymousClassHandler"/>
<inlineActionHandler implementation="com.intellij.refactoring.inlineSuperClass.InlineSuperClassRefactoringHandler" id="superClass"/>
<inlineActionHandler implementation="com.intellij.refactoring.inline.InlineToAnonymousClassHandler" order="before superClass"/>
<inlineActionHandler implementation="com.intellij.refactoring.inline.InlineParameterHandler"/>
<generateAccessorProvider implementation="com.intellij.codeInsight.generation.JavaGenerateAccessorProvider"/>
<suggestedRefactoringSupport language="JAVA" implementationClass="com.intellij.java.refactoring.suggested.JavaSuggestedRefactoringSupport"/>
@@ -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);
@@ -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));
}