java create class from usage: setup super ref for created nested class (IDEA-257288)

GitOrigin-RevId: c5a37a119f50aa3468c74ce621108e00e1168852
This commit is contained in:
Anna Kozlova
2020-12-18 19:01:29 +00:00
committed by intellij-monorepo-bot
parent faea4ac0f3
commit f535bd830e
3 changed files with 25 additions and 2 deletions
@@ -328,7 +328,7 @@ public final class CreateFromUsageUtils {
if (qualifierElement instanceof PsiClass) {
if (!FileModificationService.getInstance().preparePsiElementForWrite(qualifierElement)) return null;
return WriteAction.compute(() -> createClassInQualifier((PsiClass)qualifierElement, classKind, name, referenceElement));
return WriteAction.compute(() -> createClassInQualifier((PsiClass)qualifierElement, classKind, name, referenceElement, superClassName));
}
}
else {
@@ -393,7 +393,8 @@ public final class CreateFromUsageUtils {
private static PsiClass createClassInQualifier(PsiClass psiClass,
CreateClassKind classKind,
String name,
PsiJavaCodeReferenceElement referenceElement) {
PsiJavaCodeReferenceElement referenceElement,
@Nullable String superClassName) {
PsiManager manager = psiClass.getManager();
PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(manager.getProject());
PsiClass result = classKind == CreateClassKind.INTERFACE ? elementFactory.createInterface(name) :
@@ -403,6 +404,9 @@ public final class CreateFromUsageUtils {
elementFactory.createEnum(name);
CreateFromUsageBaseFix.setupGenericParameters(result, referenceElement);
result = (PsiClass)CodeStyleManager.getInstance(manager.getProject()).reformat(result);
if (!StringUtil.isEmpty(superClassName)) {
setupSuperClassReference(result, superClassName);
}
return (PsiClass) psiClass.add(result);
}
@@ -0,0 +1,11 @@
// "Create class 'Foo'" "true"
class MyTest {
{
Class<? extends Throwable> c = Bar.Foo.class;
}
}
class Bar {
public class Foo extends Throwable {
}
}
@@ -0,0 +1,8 @@
// "Create class 'Foo'" "true"
class MyTest {
{
Class<? extends Throwable> c = Bar.Fo<caret>o.class;
}
}
class Bar {}