rename package: do not replace dir with corresponding package when package was already processed

move classes from dir: update file refs
This commit is contained in:
anna
2011-07-12 17:43:36 +04:00
parent 49d4914f57
commit 2e8060a53b
15 changed files with 105 additions and 10 deletions
@@ -68,10 +68,6 @@ public class RenamePsiDirectoryProcessor extends RenamePsiElementProcessor {
@NotNull
@Override
public Collection<PsiReference> findReferences(PsiElement element) {
final PsiPackage aPackage = JavaDirectoryService.getInstance().getPackage((PsiDirectory) element);
if (aPackage != null) {
return ReferencesSearch.search(aPackage, element.getUseScope()).findAll();
}
return ReferencesSearch.search(element).findAll();
}
@@ -0,0 +1,9 @@
package pack2;
import pack1.*;
import target.pack1.S1;
public class UsagesFromBoth {
S1 s1;
S2 s2;
}
@@ -0,0 +1,3 @@
package target.pack1;
public class S1{}
@@ -0,0 +1,3 @@
package pack1;
public class S2{}
@@ -0,0 +1,9 @@
package pack2;
import pack1.*;
import target.pack1.S1;
public class UsagesFromBoth2 {
S1 s1;
S2 s2;
}
@@ -0,0 +1,3 @@
<root xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="../../src1/target/pack1/S1.java" xpointer="xpointer(/components/*)"/>
</root>
@@ -0,0 +1,3 @@
package pack1;
public class S1{}
@@ -0,0 +1,8 @@
package pack2;
import pack1.*;
public class UsagesFromBoth {
S1 s1;
S2 s2;
}
@@ -0,0 +1,3 @@
package pack1;
public class S2{}
@@ -0,0 +1,8 @@
package pack2;
import pack1.*;
public class UsagesFromBoth2 {
S1 s1;
S2 s2;
}
@@ -0,0 +1,3 @@
<root xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="../../src1/pack1/S1.java" xpointer="xpointer(/components/*)"/>
</root>
@@ -63,6 +63,10 @@ public class MovePackageAsDirectoryTest extends MultiFileTestCase {
doTest(createAction("pack1", "target"));
}
public void testXmlDirRefs() throws Exception {
doTest(createAction("pack1", "target"));
}
private PerformAction createAction(final String packageName, final String targetPackageName) {
return new PerformAction() {
@Override
@@ -3,13 +3,18 @@ package com.intellij.refactoring.move.moveClassesOrPackages;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.ProperTextRange;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiReference;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFileHandler;
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesUtil;
import com.intellij.usageView.UsageInfo;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.List;
@@ -45,8 +50,29 @@ public abstract class MoveDirectoryWithClassesHelper {
public static class Default extends MoveDirectoryWithClassesHelper {
@Override
public void findUsages(Collection<PsiFile> filesToMove, PsiDirectory[] directoriesToMove, Collection<UsageInfo> result,
boolean searchInComments, boolean searchInNonJavaFiles, Project project) {
public void findUsages(Collection<PsiFile> filesToMove,
PsiDirectory[] directoriesToMove,
Collection<UsageInfo> result,
boolean searchInComments,
boolean searchInNonJavaFiles,
Project project) {
for (PsiFile file : filesToMove) {
for (PsiReference reference : ReferencesSearch.search(file)) {
result.add(new MyUsageInfo(reference, file));
}
}
}
@Override
public void postProcessUsages(UsageInfo[] usages) {
for (UsageInfo usage : usages) {
if (usage instanceof MyUsageInfo) {
PsiReference reference = usage.getReference();
if (reference != null) {
reference.bindToElement(((MyUsageInfo)usage).myFile);
}
}
}
}
@Override
@@ -71,10 +97,6 @@ public abstract class MoveDirectoryWithClassesHelper {
return true;
}
@Override
public void postProcessUsages(UsageInfo[] usages) {
}
@Override
public void beforeMove(PsiFile psiFile) {
}
@@ -82,5 +104,26 @@ public abstract class MoveDirectoryWithClassesHelper {
@Override
public void afterMove(PsiElement newElement) {
}
private static class MyUsageInfo extends UsageInfo {
private final PsiFile myFile;
public MyUsageInfo(@NotNull PsiReference reference, PsiFile file) {
super(reference);
myFile = file;
}
@Nullable
public PsiReference getReference() {
PsiElement element = getElement();
if (element == null) {
return null;
}
else {
final ProperTextRange rangeInElement = getRangeInElement();
return rangeInElement != null ? element.findReferenceAt(rangeInElement.getStartOffset()) : element.getReference();
}
}
}
}
}