mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-05-06 05:10:22 +07:00
create enum from usage: do not insert extends Enum list; disable create class from usage when class should extend final or enum (IDEA-103480)
(cherry picked from commit b2baa7ff649c365d6d57bf873e9fd015ccc32809)
This commit is contained in:
@@ -23,6 +23,7 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -113,6 +114,12 @@ public abstract class CreateClassFromUsageBaseFix extends BaseIntentionAction {
|
||||
PsiElement parent = element.getParent();
|
||||
if (parent instanceof PsiExpression && !(parent instanceof PsiReferenceExpression)) return false;
|
||||
if (!isAvailableInContext(element)) return false;
|
||||
final String superClassName = getSuperClassName(element);
|
||||
if (superClassName != null) {
|
||||
if (superClassName.equals(CommonClassNames.JAVA_LANG_ENUM) && myKind != CreateClassKind.ENUM) return false;
|
||||
final PsiClass psiClass = JavaPsiFacade.getInstance(project).findClass(superClassName, GlobalSearchScope.allScope(project));
|
||||
if (psiClass != null && psiClass.hasModifierProperty(PsiModifier.FINAL)) return false;
|
||||
}
|
||||
final int offset = editor.getCaretModel().getOffset();
|
||||
if (CreateFromUsageUtils.shouldShowTag(offset, nameElement, element)) {
|
||||
setText(getText(nameElement.getText()));
|
||||
|
||||
@@ -447,7 +447,7 @@ public class CreateFromUsageUtils {
|
||||
targetClass = (PsiClass) sourceFile.add(aClass);
|
||||
}
|
||||
|
||||
if (superClassName != null) {
|
||||
if (superClassName != null && (classKind != CreateClassKind.ENUM || !superClassName.equals(CommonClassNames.JAVA_LANG_ENUM))) {
|
||||
final PsiClass superClass =
|
||||
facade.findClass(superClassName, targetClass.getResolveScope());
|
||||
final PsiJavaCodeReferenceElement superClassReference = factory.createReferenceElementByFQClassName(superClassName, targetClass.getResolveScope());
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
// "Create Enum 'Foo'" "true"
|
||||
public class Test {
|
||||
void f(Class<? extends Enum> e) {}
|
||||
{
|
||||
f(Foo.class);
|
||||
}
|
||||
}
|
||||
|
||||
public enum Foo {}
|
||||
@@ -0,0 +1,7 @@
|
||||
// "Create Enum 'Foo'" "true"
|
||||
public class Test {
|
||||
void f(Class<? extends Enum> e) {}
|
||||
{
|
||||
f(Fo<caret>o.class);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// "Create Class 'Abc'" "false"
|
||||
public class Test {
|
||||
void foo(Class<? extends A> cl){}
|
||||
{
|
||||
foo(A<caret>bc.class);
|
||||
}
|
||||
}
|
||||
final class A {}
|
||||
Reference in New Issue
Block a user