moved to psi

This commit is contained in:
Alexey Kudravtsev
2013-05-24 13:49:41 +04:00
parent cbe66f673e
commit 93705e4f6e
7 changed files with 27 additions and 14 deletions
@@ -53,6 +53,7 @@ import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.classMembers.MemberInfo;
import com.intellij.usageView.UsageInfo;
import com.intellij.usageView.UsageViewDescriptor;
import com.intellij.usageView.UsageViewUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.VisibilityUtil;
import com.intellij.util.containers.ContainerUtil;
@@ -320,7 +321,7 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor {
super.performRefactoring(usageInfos);
if (myNewVisibility == null) return;
for (PsiMember member : members) {
VisibilityUtil.fixVisibility(usageInfos, member, myNewVisibility);
VisibilityUtil.fixVisibility(UsageViewUtil.toElements(usageInfos), member, myNewVisibility);
}
}
@@ -24,6 +24,7 @@ import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiMethod;
import com.intellij.refactoring.util.FixableUsageInfo;
import com.intellij.usageView.UsageInfo;
import com.intellij.usageView.UsageViewUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.VisibilityUtil;
@@ -46,9 +47,9 @@ public class BeanClassVisibilityUsageInfo extends FixableUsageInfo {
@Override
public void fixUsage() throws IncorrectOperationException {
VisibilityUtil.fixVisibility(usages, existingClass, myNewVisibility);
VisibilityUtil.fixVisibility(UsageViewUtil.toElements(usages), existingClass, myNewVisibility);
if (myExistingClassCompatibleConstructor != null) {
VisibilityUtil.fixVisibility(usages, myExistingClassCompatibleConstructor, myNewVisibility);
VisibilityUtil.fixVisibility(UsageViewUtil.toElements(usages), myExistingClassCompatibleConstructor, myNewVisibility);
}
}
}
@@ -34,6 +34,7 @@ import com.intellij.refactoring.move.MoveInstanceMembersUtil;
import com.intellij.refactoring.util.*;
import com.intellij.usageView.UsageInfo;
import com.intellij.usageView.UsageViewDescriptor;
import com.intellij.usageView.UsageViewUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.VisibilityUtil;
import com.intellij.util.containers.HashSet;
@@ -245,7 +246,7 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
for (PsiReference reference : docRefs) {
reference.bindToElement(method);
}
VisibilityUtil.fixVisibility(usages, method, myNewVisibility);
VisibilityUtil.fixVisibility(UsageViewUtil.toElements(usages), method, myNewVisibility);
}
catch (IncorrectOperationException e) {
LOG.error(e);
@@ -203,7 +203,7 @@ public class MoveMembersProcessor extends BaseRefactoringProcessor {
final PsiElement anchor;
if (anchorsInSourceClass.containsKey(member)) {
final PsiMember memberInSourceClass = anchorsInSourceClass.get(member);
//anchor should be already moved as myMembersToMove contains members in order they appear in source class
//anchor should be already moved as myMembersToMove contains members in order they appear in source class
anchor = memberInSourceClass != null ? movedMembers.get(memberInSourceClass) : null;
}
else {
@@ -258,7 +258,8 @@ public class MoveMembersProcessor extends BaseRefactoringProcessor {
filtered.add(usage);
}
}
VisibilityUtil.fixVisibility(filtered.toArray(new UsageInfo[filtered.size()]), newMember, myNewVisibility);
UsageInfo[] infos = filtered.toArray(new UsageInfo[filtered.size()]);
VisibilityUtil.fixVisibility(UsageViewUtil.toElements(infos), newMember, myNewVisibility);
}
protected boolean preprocessUsages(Ref<UsageInfo[]> refUsages) {
@@ -19,7 +19,7 @@
* User: dsl
* Date: 07.06.2002
* Time: 18:48:01
* To change template for new class use
* To change template for new class use
* Code Style | Class Templates options (Tools | IDE Options).
*/
package com.intellij.util;
@@ -28,7 +28,6 @@ import com.intellij.psi.*;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.usageView.UsageInfo;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NonNls;
@@ -46,7 +45,7 @@ public class VisibilityUtil {
}
public static int compare(@PsiModifier.ModifierConstant String v1, @PsiModifier.ModifierConstant String v2) {
return ArrayUtil.find(visibilityModifiers, v2) - ArrayUtil.find(visibilityModifiers, v1);
return ArrayUtilRt.find(visibilityModifiers, v2) - ArrayUtilRt.find(visibilityModifiers, v1);
}
@PsiModifier.ModifierConstant
@@ -123,11 +122,10 @@ public class VisibilityUtil {
return PsiBundle.visibilityPresentation(modifier);
}
public static void fixVisibility(UsageInfo[] usageInfos, PsiMember member, @PsiModifier.ModifierConstant String newVisibility) {
public static void fixVisibility(PsiElement[] elements, PsiMember member, @PsiModifier.ModifierConstant String newVisibility) {
if (newVisibility == null) return;
if (ESCALATE_VISIBILITY.equals(newVisibility)) {
for (UsageInfo info : usageInfos) {
final PsiElement element = info.getElement();
for (PsiElement element : elements) {
if (element != null) {
escalateVisibility(member, element);
}
@@ -26,8 +26,6 @@ public interface RefactoringTransaction {
/**
* Returns listener for element (element must belong to set of affected elements).
* Refactorings should call appropriate methods of a listener, giving a modified (or new) element.
* @param element
* @return
*/
RefactoringElementListener getElementListener(PsiElement element);
@@ -25,6 +25,8 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiReference;
import com.intellij.refactoring.util.MoveRenameUsageInfo;
import com.intellij.refactoring.util.NonCodeUsageInfo;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
@@ -123,4 +125,15 @@ public class UsageViewUtil {
final int size = collection.size();
return size == 0 ? UsageInfo.EMPTY_ARRAY : collection.toArray(new UsageInfo[size]);
}
@NotNull
public static PsiElement[] toElements(@NotNull UsageInfo[] usageInfos) {
return ContainerUtil.map2Array(usageInfos, PsiElement.class, new Function<UsageInfo, PsiElement>() {
@Override
public PsiElement fun(UsageInfo info) {
return info.getElement();
}
});
}
}