collect members before move in order to fix visibility aftwrwards (IDEA-52377)

This commit is contained in:
anna
2010-02-24 17:31:12 +03:00
parent d67c5a8da3
commit 312e1c7015
5 changed files with 57 additions and 6 deletions
@@ -225,21 +225,24 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor {
if (delegationRequired) {
buildDelegate();
}
super.performRefactoring(usageInfos);
if (myNewVisibility == null) return;
final Set<PsiMember> members = new HashSet<PsiMember>();
for (PsiMethod method : methods) {
final PsiMethod member = psiClass.findMethodBySignature(method, false);
if (member != null) {
VisibilityUtil.fixVisibility(usageInfos, member, myNewVisibility);
members.add(member);
}
}
for (PsiField field : fields) {
final PsiField member = psiClass.findFieldByName(field.getName(), false);
if (member != null) {
VisibilityUtil.fixVisibility(usageInfos, member, myNewVisibility);
members.add(member);
}
}
super.performRefactoring(usageInfos);
if (myNewVisibility == null) return;
for (PsiMember member : members) {
VisibilityUtil.fixVisibility(usageInfos, member, myNewVisibility);
}
}
@@ -0,0 +1,9 @@
public class Extracted<T> {
public T myT;
public Extracted() {
}
public void foos() {
}
}
@@ -0,0 +1,10 @@
class Test<T> {
final Extracted<T> extracted = new Extracted<T>();
void bar(){
extracted.foos();
}
void foos(){
extracted.foos();
}
}
@@ -0,0 +1,7 @@
class Test<T> {
T myT;
void bar(){
foos();
}
void foos(){}
}
@@ -4,15 +4,16 @@
*/
package com.intellij.refactoring;
import com.intellij.JavaTestUtil;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiField;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.refactoring.extractclass.ExtractClassProcessor;
import com.intellij.JavaTestUtil;
import junit.framework.Assert;
import java.util.ArrayList;
@@ -214,4 +215,25 @@ public class ExtractClassTest extends MultiFileTestCase{
doTestField(null);
}
public void testPublicVisibility() throws Exception {
doTest(new PerformAction() {
public void performAction(final VirtualFile rootDir, final VirtualFile rootAfter) throws Exception {
PsiClass aClass = myJavaFacade.findClass("Test", GlobalSearchScope.projectScope(myProject));
assertNotNull("Class Test not found", aClass);
final ArrayList<PsiMethod> methods = new ArrayList<PsiMethod>();
methods.add(aClass.findMethodsByName("foos", false)[0]);
final ArrayList<PsiField> fields = new ArrayList<PsiField>();
fields.add(aClass.findFieldByName("myT", false));
final ExtractClassProcessor processor =
new ExtractClassProcessor(aClass, fields, methods, new ArrayList<PsiClass>(), "", "Extracted", PsiModifier.PUBLIC, false);
processor.run();
LocalFileSystem.getInstance().refresh(false);
FileDocumentManager.getInstance().saveAllDocuments();
}
});
}
}