[intention-preview] ConvertInterfaceToClassFix

GitOrigin-RevId: 0eaa24c14a74ead8fcd085958ea6a1530176c9e8
This commit is contained in:
Mikhail Pyltsin
2023-01-18 12:22:54 +01:00
committed by intellij-monorepo-bot
parent 068edf649a
commit 98ae394300
9 changed files with 27 additions and 8 deletions

View File

@@ -4,6 +4,7 @@ package com.intellij.codeInsight.daemon.impl.quickfix;
import com.intellij.codeInsight.AnnotationUtil;
import com.intellij.codeInsight.FileModificationService;
import com.intellij.codeInsight.intention.PriorityAction;
import com.intellij.codeInsight.intention.preview.IntentionPreviewInfo;
import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement;
import com.intellij.codeInspection.util.IntentionFamilyName;
import com.intellij.codeInspection.util.IntentionName;
@@ -17,6 +18,7 @@ import com.intellij.psi.presentation.java.ClassPresentationUtil;
import com.intellij.psi.search.SearchScope;
import com.intellij.psi.search.searches.ClassInheritorsSearch;
import com.intellij.psi.search.searches.FunctionalExpressionSearch;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.BaseRefactoringProcessor;
import com.intellij.refactoring.ui.ConflictsDialog;
@@ -76,6 +78,23 @@ public class ConvertInterfaceToClassFix extends LocalQuickFixAndIntentionActionO
return IntentionPowerPackBundle.message("convert.interface.to.class.intention.family.name");
}
@Override
public @NotNull IntentionPreviewInfo generatePreview(@NotNull Project project, @NotNull Editor editor, @NotNull PsiFile copyFile) {
PsiElement element = myStartElement.getElement();
if (!(element instanceof PsiClass psiClass && psiClass.isInterface())) {
return IntentionPreviewInfo.EMPTY;
}
PsiFile file = psiClass.getContainingFile();
if (copyFile.getOriginalFile() == file) {
PsiClass elementInCopy = PsiTreeUtil.findSameElementInCopy(psiClass, copyFile);
changeInterfaceToClass(elementInCopy);
moveExtendsToImplements(elementInCopy);
return IntentionPreviewInfo.DIFF;
}
//something strange happens
return IntentionPreviewInfo.EMPTY;
}
public static void convert(@NotNull PsiClass anInterface) {
final SearchScope searchScope = anInterface.getUseScope();
final Collection<PsiClass> inheritors = ClassInheritorsSearch.search(anInterface, searchScope, false).findAll();