extract class: correct reference replacement (IDEA-94288)

This commit is contained in:
anna
2012-11-09 19:23:04 +01:00
parent 2d394e68e7
commit 7eabf004f0
5 changed files with 55 additions and 13 deletions
@@ -71,21 +71,33 @@ public class MutationUtils {
codeStyleManager.reformat(shortenedElement);
}
public static void replaceReference(String className,
PsiJavaCodeReferenceElement reference)
throws IncorrectOperationException {
final PsiManager mgr = reference.getManager();
final Project project = mgr.getProject();
final PsiElementFactory factory = JavaPsiFacade.getInstance(mgr.getProject()).getElementFactory();
final GlobalSearchScope scope = GlobalSearchScope.allScope(project);
public static void replaceReference(String className,
PsiJavaCodeReferenceElement reference)
throws IncorrectOperationException {
final PsiManager mgr = reference.getManager();
final Project project = mgr.getProject();
final JavaPsiFacade facade = JavaPsiFacade.getInstance(mgr.getProject());
final PsiElementFactory factory = facade.getElementFactory();
final GlobalSearchScope scope = GlobalSearchScope.allScope(project);
final PsiJavaCodeReferenceElement newReference =
factory.createReferenceElementByFQClassName(className, scope);
final PsiElement insertedElement = reference.replace(newReference);
final CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(mgr.getProject());
final PsiElement shortenedElement = JavaCodeStyleManager.getInstance(mgr.getProject()).shortenClassReferences(insertedElement);
codeStyleManager.reformat(shortenedElement);
final PsiElement insertedElement;
final PsiElement parent = reference.getParent();
if (parent instanceof PsiReferenceExpression) {
final PsiClass aClass = facade.findClass(className, scope);
if (aClass == null) return;
((PsiReferenceExpression)parent).setQualifierExpression(factory.createReferenceExpression(aClass));
insertedElement = ((PsiReferenceExpression)parent).getQualifierExpression();
}
else {
final PsiJavaCodeReferenceElement newReference =
factory.createReferenceElementByFQClassName(className, scope);
insertedElement = reference.replace(newReference);
}
final CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(mgr.getProject());
final PsiElement shortenedElement = JavaCodeStyleManager.getInstance(mgr.getProject()).shortenClassReferences(insertedElement);
codeStyleManager.reformat(shortenedElement);
}
public static void replaceStatement(String newStatement,
PsiStatement statement)
@@ -0,0 +1,6 @@
public class Extracted {
static class Inner {
public static void get() {
}
}
}
@@ -0,0 +1,8 @@
class Test {
Extracted.Inner p;
{
Extracted.Inner.get();
}
}
@@ -0,0 +1,12 @@
class Test {
static class Inner {
public static void get() {
}
}
Inner p;
{
Inner.get();
}
}
@@ -113,6 +113,10 @@ public class ExtractClassTest extends MultiFileTestCase{
doTestFieldAndMethod("bar");
}
public void testInnerClassRefs() throws Exception {
doTestInnerClass();
}
private void doTestFieldAndMethod(final String methodName) throws Exception {
doTest(new PerformAction() {
@Override