[kotlin] Add API for retargeting usages in MoveDirectoryWithClassesHelper

Various languages might have different requirements on how usages should be retargeted, this API allows implementations to define their own retargeting logic. #KTIJ-29395

GitOrigin-RevId: c411ef45ef091316a1fab9dd620e57c73d9975b9
This commit is contained in:
Bart van Helvert
2024-06-04 14:10:16 +02:00
committed by intellij-monorepo-bot
parent aedb2b1c0f
commit 4171b97475
5 changed files with 41 additions and 4 deletions

View File

@@ -14,6 +14,7 @@ import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.refactoring.PackageWrapper;
import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.refactoring.util.MoveRenameUsageInfo;
import com.intellij.refactoring.util.RefactoringConflictsUtil;
import com.intellij.usageView.UsageInfo;
import com.intellij.util.Function;
@@ -124,6 +125,22 @@ public class JavaMoveDirectoryWithClassesHelper extends MoveDirectoryWithClasses
return true;
}
@Override
public void retargetUsages(List<UsageInfo> usages, Map<PsiElement, PsiElement> oldToNewMap) {
List<UsageInfo> usageInfosToProcess = ContainerUtil.filter(usages, usageInfo -> {
if (usageInfo instanceof MoveRenameUsageInfo moveRenameUsageInfo) {
final PsiElement referencedElement = moveRenameUsageInfo.getReferencedElement();
if (referencedElement == null) return false;
return referencedElement.getContainingFile() instanceof PsiJavaFile;
}
else {
return false;
}
});
CommonMoveUtil.retargetUsages(usageInfosToProcess.toArray(UsageInfo.EMPTY_ARRAY), oldToNewMap);
usages.removeAll(usageInfosToProcess);
}
@Override
public void postProcessUsages(UsageInfo[] usages, Function<? super PsiDirectory, ? extends PsiDirectory> newDirMapper) {
for (UsageInfo usage : usages) {