create from usage: setup extends/implements list according to created pairs (IDEA-160973)

This commit is contained in:
Anna Kozlova
2016-09-09 17:23:23 +03:00
parent 6e9f731d2d
commit fe3c8e1843
4 changed files with 34 additions and 11 deletions

View File

@@ -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(

View File

@@ -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);

View File

@@ -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 {
}
}

View File

@@ -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);
}
}