mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
CreateSubclass: support sealed classes (IDEA-243902)
GitOrigin-RevId: 430dbb9d1a8934c2169e3f1050b18e7d78f0d985
This commit is contained in:
committed by
intellij-monorepo-bot
parent
03a79536c5
commit
175337c304
@@ -60,7 +60,9 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class CreateSubclassAction extends BaseIntentionAction {
|
||||
private static final Logger LOG = Logger.getInstance(CreateSubclassAction.class);
|
||||
@@ -262,6 +264,10 @@ public class CreateSubclassAction extends BaseIntentionAction {
|
||||
else {
|
||||
ref = (PsiJavaCodeReferenceElement)targetClass.getExtendsList().add(ref);
|
||||
}
|
||||
if (psiClass.hasModifierProperty(PsiModifier.SEALED)) {
|
||||
String createdClassName = targetClass.getQualifiedName();
|
||||
FillPermitsListFix.fillPermitsList(psiClass, Collections.singleton(createdClassName));
|
||||
}
|
||||
if (psiClass.hasTypeParameters() || includeClassName) {
|
||||
final Editor editor = CodeInsightUtil.positionCursorAtLBrace(project, targetClass.getContainingFile(), targetClass);
|
||||
final TemplateBuilderImpl templateBuilder = editor != null
|
||||
@@ -361,6 +367,11 @@ public class CreateSubclassAction extends BaseIntentionAction {
|
||||
editor.getCaretModel().moveToOffset(offset);
|
||||
}
|
||||
|
||||
if (psiClass.hasModifierProperty(PsiModifier.SEALED)) {
|
||||
PsiIdentifier targetNameIdentifier = Objects.requireNonNull(targetClass.getNameIdentifier());
|
||||
editor.getCaretModel().moveToOffset(targetNameIdentifier.getTextRange().getStartOffset());
|
||||
}
|
||||
|
||||
if (showChooser) OverrideImplementUtil.chooseAndImplementMethods(project, editor, targetClass);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
public class Subclass extends Superclass {
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
public sealed class Superclass permits Subclass {
|
||||
void foo() {}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
public sealed class Superclass {
|
||||
void foo() {}
|
||||
}
|
||||
+11
@@ -21,12 +21,19 @@ import com.intellij.openapi.application.ex.PathManagerEx;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.refactoring.LightMultiFileTestCase;
|
||||
import com.intellij.testFramework.LightProjectDescriptor;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public class CreateSubclassTest extends LightMultiFileTestCase {
|
||||
@Override
|
||||
protected @NotNull LightProjectDescriptor getProjectDescriptor() {
|
||||
return JAVA_15;
|
||||
}
|
||||
|
||||
public void testGenerics() {
|
||||
doTest();
|
||||
}
|
||||
@@ -43,6 +50,10 @@ public class CreateSubclassTest extends LightMultiFileTestCase {
|
||||
doTestInner();
|
||||
}
|
||||
|
||||
public void testSealed() {
|
||||
doTest();
|
||||
}
|
||||
|
||||
private void doTestInner() {
|
||||
doTest(() -> {
|
||||
PsiClass superClass = myFixture.findClass("Test");
|
||||
|
||||
Reference in New Issue
Block a user