EA-47556 - NPE: MoveFilesOrDirectoriesProcessor$.compare

move sortDepthFirstRightLeftOrder to api
This commit is contained in:
anna
2013-07-05 16:28:12 +02:00
parent dfca733d38
commit 83dde310cd
9 changed files with 28 additions and 33 deletions
@@ -187,7 +187,7 @@ public class ConvertToInstanceMethodProcessor extends BaseRefactoringProcessor {
myTypeParameterReplacements = buildTypeParameterReplacements();
List<PsiClass> inheritors = new ArrayList<PsiClass>();
RefactoringUtil.sortDepthFirstRightLeftOrder(usages);
CommonRefactoringUtil.sortDepthFirstRightLeftOrder(usages);
// Process usages
for (final UsageInfo usage : usages) {
@@ -299,7 +299,7 @@ public class EncapsulateFieldsProcessor extends BaseRefactoringProcessor {
for (List<MyUsageInfo> usageInfos : usagesInFiles.values()) {
//this is to avoid elements to become invalid as a result of processUsage
final MyUsageInfo[] infos = usageInfos.toArray(new MyUsageInfo[usageInfos.size()]);
RefactoringUtil.sortDepthFirstRightLeftOrder(infos);
CommonRefactoringUtil.sortDepthFirstRightLeftOrder(infos);
for (MyUsageInfo info : infos) {
processUsage(info);
@@ -404,7 +404,7 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor {
}
}
else {
RefactoringUtil.sortDepthFirstRightLeftOrder(usages);
CommonRefactoringUtil.sortDepthFirstRightLeftOrder(usages);
if (myMethod.isConstructor()) {
for (UsageInfo usage : usages) {
PsiElement element = usage.getElement();
@@ -32,10 +32,7 @@ import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.refactoring.inlineSuperClass.usageInfo.*;
import com.intellij.refactoring.memberPushDown.PushDownConflicts;
import com.intellij.refactoring.memberPushDown.PushDownProcessor;
import com.intellij.refactoring.util.DocCommentPolicy;
import com.intellij.refactoring.util.FixableUsageInfo;
import com.intellij.refactoring.util.FixableUsagesRefactoringProcessor;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.*;
import com.intellij.refactoring.util.classMembers.MemberInfo;
import com.intellij.refactoring.util.classMembers.MemberInfoStorage;
import com.intellij.usageView.UsageInfo;
@@ -290,7 +287,7 @@ public class InlineSuperClassRefactoringProcessor extends FixableUsagesRefactori
} else {
super.performRefactoring(pushDownUsages);
}
RefactoringUtil.sortDepthFirstRightLeftOrder(usages);
CommonRefactoringUtil.sortDepthFirstRightLeftOrder(usages);
for (UsageInfo usageInfo : usages) {
if (!(usageInfo instanceof ReplaceExtendsListUsageInfo || usageInfo instanceof RemoveImportUsageInfo)) {
try {
@@ -38,7 +38,7 @@ public abstract class FixableUsagesRefactoringProcessor extends BaseRefactoringP
}
protected void performRefactoring(UsageInfo[] usageInfos) {
RefactoringUtil.sortDepthFirstRightLeftOrder(usageInfos);
CommonRefactoringUtil.sortDepthFirstRightLeftOrder(usageInfos);
for (UsageInfo usageInfo : usageInfos) {
if (usageInfo instanceof FixableUsageInfo) {
try {
@@ -172,22 +172,6 @@ public class RefactoringUtil {
}
}
//order of usages accross different files is irrelevant
public static void sortDepthFirstRightLeftOrder(final UsageInfo[] usages) {
Arrays.sort(usages, new Comparator<UsageInfo>() {
public int compare(final UsageInfo usage1, final UsageInfo usage2) {
final PsiElement element1 = usage1.getElement();
final PsiElement element2 = usage2.getElement();
if (element1 == null) {
if (element2 == null) return 0;
return 1;
}
if (element2 == null) return -1;
return element2.getTextRange().getStartOffset() - element1.getTextRange().getStartOffset();
}
});
}
@Nullable
public static String suggestNewOverriderName(String oldOverriderName, String oldBaseName, String newBaseName) {
if (oldOverriderName.equals(oldBaseName)) {
@@ -29,6 +29,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.usageView.UsageInfo;
import com.intellij.util.containers.ContainerUtil;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NonNls;
@@ -38,6 +39,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
/**
* @author ven
@@ -51,6 +53,22 @@ public class CommonRefactoringUtil {
dialog.show();
}
//order of usages accross different files is irrelevant
public static void sortDepthFirstRightLeftOrder(final UsageInfo[] usages) {
Arrays.sort(usages, new Comparator<UsageInfo>() {
public int compare(final UsageInfo usage1, final UsageInfo usage2) {
final PsiElement element1 = usage1.getElement();
final PsiElement element2 = usage2.getElement();
if (element1 == null) {
if (element2 == null) return 0;
return 1;
}
if (element2 == null) return -1;
return element2.getTextRange().getStartOffset() - element1.getTextRange().getStartOffset();
}
});
}
/**
* Fatal refactoring problem during unit test run. Corresponds to message of modal dialog shown during user driven refactoring.
*/
@@ -33,6 +33,7 @@ import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.refactoring.move.FileReferenceContextUtil;
import com.intellij.refactoring.move.MoveCallback;
import com.intellij.refactoring.rename.RenameUtil;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import com.intellij.refactoring.util.NonCodeUsageInfo;
import com.intellij.usageView.UsageInfo;
import com.intellij.usageView.UsageViewDescriptor;
@@ -176,12 +177,7 @@ public class MoveFilesOrDirectoriesProcessor extends BaseRefactoringProcessor {
elementListener.elementMoved(element);
}
// sort by offset descending to process correctly several usages in one PsiElement [IDEADEV-33013]
Arrays.sort(usages, new Comparator<UsageInfo>() {
@Override
public int compare(final UsageInfo o1, final UsageInfo o2) {
return o1.getElement() == o2.getElement() ? o2.getRangeInElement().getStartOffset() - o1.getRangeInElement().getStartOffset() : 0;
}
});
CommonRefactoringUtil.sortDepthFirstRightLeftOrder(usages);
// fix references in moved files to outer files
for (PsiFile movedFile : movedFiles) {
@@ -23,7 +23,7 @@ import com.intellij.psi.PsiReference;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.refactoring.BaseRefactoringProcessor;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import com.intellij.usageView.BaseUsageViewDescriptor;
import com.intellij.usageView.UsageInfo;
import com.intellij.usageView.UsageViewDescriptor;
@@ -192,7 +192,7 @@ public class GroovyInlineLocalProcessor extends BaseRefactoringProcessor {
@Override
protected void performRefactoring(UsageInfo[] usages) {
RefactoringUtil.sortDepthFirstRightLeftOrder(usages);
CommonRefactoringUtil.sortDepthFirstRightLeftOrder(usages);
for (UsageInfo usage : usages) {
GrVariableInliner.inlineReference(usage, myLocal, mySettings.getInitializer());