From 96b9aba17219c4da827ab0aef1c7072369931312 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 31 Mar 2017 15:56:15 +0300 Subject: [PATCH] Move: Process Kotlin files befoire Java files This ensures that light classes are updated before changing references in Java files. #KT-10577 Fixed --- .../kotlin/idea/refactoring/move/moveUtils.kt | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt index 70111fed644..794f58d2b7f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt @@ -425,10 +425,20 @@ fun invokeMoveFilesOrDirectoriesRefactoring( try { val choice = if (elements.size > 1 || elements[0] is PsiDirectory) intArrayOf(-1) else null - val elementsToMove = elements.filterNot { - it is PsiFile - && runWriteAction { CopyFilesOrDirectoriesHandler.checkFileExist(selectedDir, choice, it, it.name, "Move") } - } + val elementsToMove = elements + .filterNot { + it is PsiFile + && runWriteAction { CopyFilesOrDirectoriesHandler.checkFileExist(selectedDir, choice, it, it.name, "Move") } + } + .sortedWith( // process Kotlin files first so that light classes are updated before changing references in Java files + Comparator { o1, o2 -> + when { + o1 is KtElement && o2 !is KtElement -> -1 + o1 !is KtElement && o2 is KtElement -> 1 + else -> 0 + } + } + ) elementsToMove.forEach { MoveFilesOrDirectoriesUtil.checkMove(it, selectedDir!!)