mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 06:39:38 +07:00
create from usage: setup extends/implements list according to created pairs (IDEA-160973)
This commit is contained in:
@@ -453,12 +453,7 @@ public class CreateFromUsageUtils {
|
||||
}
|
||||
|
||||
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());
|
||||
final PsiReferenceList list = classKind == CreateClassKind.INTERFACE || superClass == null || !superClass.isInterface() ?
|
||||
targetClass.getExtendsList() : targetClass.getImplementsList();
|
||||
list.add(superClassReference);
|
||||
setupSuperClassReference(targetClass, superClassName);
|
||||
}
|
||||
if (contextElement instanceof PsiJavaCodeReferenceElement) {
|
||||
CreateFromUsageBaseFix.setupGenericParameters(targetClass, (PsiJavaCodeReferenceElement)contextElement);
|
||||
@@ -473,6 +468,17 @@ public class CreateFromUsageUtils {
|
||||
});
|
||||
}
|
||||
|
||||
public static void setupSuperClassReference(PsiClass targetClass, String superClassName) {
|
||||
JavaPsiFacade facade = JavaPsiFacade.getInstance(targetClass.getProject());
|
||||
PsiElementFactory factory = facade.getElementFactory();
|
||||
final PsiClass superClass =
|
||||
facade.findClass(superClassName, targetClass.getResolveScope());
|
||||
final PsiJavaCodeReferenceElement superClassReference = factory.createReferenceElementByFQClassName(superClassName, targetClass.getResolveScope());
|
||||
final PsiReferenceList list = targetClass.isInterface() || superClass == null || !superClass.isInterface() ?
|
||||
targetClass.getExtendsList() : targetClass.getImplementsList();
|
||||
list.add(superClassReference);
|
||||
}
|
||||
|
||||
public static void scheduleFileOrPackageCreationFailedMessageBox(final IncorrectOperationException e, final String name, final PsiDirectory directory,
|
||||
final boolean isPackage) {
|
||||
ApplicationManager.getApplication().invokeLater(() -> Messages.showErrorDialog(QuickFixBundle.message(
|
||||
|
||||
@@ -150,11 +150,7 @@ public class CreateInnerClassFromUsageFix extends CreateClassFromUsageBaseFix {
|
||||
modifierList.setModifierProperty(PsiModifier.STATIC, true);
|
||||
}
|
||||
if (superClassName != null) {
|
||||
PsiJavaCodeReferenceElement superClass =
|
||||
elementFactory.createReferenceElementByFQClassName(superClassName, created.getResolveScope());
|
||||
final PsiReferenceList extendsList = created.getExtendsList();
|
||||
LOG.assertTrue(extendsList != null);
|
||||
extendsList.add(superClass);
|
||||
CreateFromUsageUtils.setupSuperClassReference(created, superClassName);
|
||||
}
|
||||
CreateFromUsageBaseFix.setupGenericParameters(created, ref);
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
// "Create inner class 'MyRunnable'" "true"
|
||||
public class Test {
|
||||
void bar(Class<? extends Runnable> c) {
|
||||
}
|
||||
|
||||
void foo() {
|
||||
bar(MyRunnable.class);
|
||||
}
|
||||
|
||||
private class MyRunnable implements Runnable {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
// "Create inner class 'MyRunnable'" "true"
|
||||
public class Test {
|
||||
void bar(Class<? extends Runnable> c) {
|
||||
}
|
||||
|
||||
void foo() {
|
||||
bar(My<caret>Runnable.class);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user