mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
CreateSubclassAction: create sealed class subclass in the same file when all current inheritors are in the same file
GitOrigin-RevId: f0db9c12a7daab38aa82ebeec34f8a55ccbb3573
This commit is contained in:
committed by
intellij-monorepo-bot
parent
417a4cdf60
commit
150b695399
+13
-4
@@ -46,6 +46,7 @@ import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.NlsContexts;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
@@ -57,6 +58,7 @@ import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.containers.SmartHashSet;
|
||||
import com.siyeh.ig.psiutils.SealedUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -213,9 +215,16 @@ public class CreateSubclassAction extends BaseIntentionAction {
|
||||
}
|
||||
|
||||
private static boolean hasOnlySameFileInheritors(PsiClass psiClass) {
|
||||
if (!psiClass.hasModifierProperty(PsiModifier.SEALED)) return false;
|
||||
return DirectClassInheritorsSearch.search(psiClass)
|
||||
.allMatch(inheritor -> inheritor.getContainingFile() == psiClass.getContainingFile());
|
||||
if (!psiClass.hasModifierProperty(PsiModifier.SEALED) || psiClass.getPermitsList() != null) return false;
|
||||
Ref<Boolean> hasInheritors = Ref.create(false);
|
||||
boolean hasOnlySameFileInheritors = DirectClassInheritorsSearch.search(psiClass).forEach((Processor<? super PsiClass>) inheritor -> {
|
||||
if (inheritor.getContainingFile() != psiClass.getContainingFile()) {
|
||||
return false;
|
||||
}
|
||||
hasInheritors.set(true);
|
||||
return true;
|
||||
});
|
||||
return hasOnlySameFileInheritors && hasInheritors.get();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -305,7 +314,7 @@ public class CreateSubclassAction extends BaseIntentionAction {
|
||||
else {
|
||||
ref = (PsiJavaCodeReferenceElement)targetClass.getExtendsList().add(ref);
|
||||
}
|
||||
if (psiClass.hasModifierProperty(PsiModifier.SEALED)) {
|
||||
if (psiClass.hasModifierProperty(PsiModifier.SEALED) && psiClass.getContainingFile() != targetClass.getContainingFile()) {
|
||||
String createdClassName = Objects.requireNonNull(targetClass.getQualifiedName());
|
||||
SmartHashSet<String> missingInheritors = new SmartHashSet<>();
|
||||
missingInheritors.add(createdClassName);
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
public sealed class Superclass permits B, Subclass {
|
||||
public sealed class Superclass {
|
||||
public void foo() {}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user