diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/copy/JetCopyClassHandler.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/copy/JetCopyClassHandler.java index 7a7e6a901ce..6ad25e3f4b1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/copy/JetCopyClassHandler.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/copy/JetCopyClassHandler.java @@ -38,7 +38,7 @@ public class JetCopyClassHandler extends CopyHandlerDelegateBase { private static PsiElement replaceElement(PsiElement element) { if (element instanceof JetClassOrObject && - KotlinMoveFilesOrDirectoriesHandler.isMovableClass((JetClassOrObject) element)) { + KotlinMoveFilesOrDirectoriesHandler.Companion.isMovableClass((JetClassOrObject) element)) { return element.getContainingFile(); } else { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/KotlinMoveFilesOrDirectoriesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/KotlinMoveFilesOrDirectoriesHandler.kt index 1ded8acf83d..939214aaa3a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/KotlinMoveFilesOrDirectoriesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/KotlinMoveFilesOrDirectoriesHandler.kt @@ -14,62 +14,35 @@ * limitations under the License. */ -package org.jetbrains.kotlin.idea.refactoring.move.moveFilesOrDirectories; +package org.jetbrains.kotlin.idea.refactoring.move.moveFilesOrDirectories -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiDirectory; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesHandler; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.psi.JetClassOrObject; -import org.jetbrains.kotlin.psi.JetDeclaration; -import org.jetbrains.kotlin.psi.JetFile; +import com.intellij.openapi.project.Project +import com.intellij.psi.PsiDirectory +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiFile +import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesHandler +import org.jetbrains.kotlin.psi.JetClassOrObject +import org.jetbrains.kotlin.psi.JetFile -import java.util.ArrayList; -import java.util.List; - -public class KotlinMoveFilesOrDirectoriesHandler extends MoveFilesOrDirectoriesHandler { - public static boolean isMovableClass(JetClassOrObject clazz) { - if (!(clazz.getParent() instanceof JetFile)) return false; - JetFile file = clazz.getContainingJetFile(); - List declarations = file.getDeclarations(); - for (JetDeclaration declaration : declarations) { - if (declaration instanceof JetClassOrObject && declaration != clazz) return false; +public class KotlinMoveFilesOrDirectoriesHandler : MoveFilesOrDirectoriesHandler() { + override fun canMove(elements: Array, targetContainer: PsiElement?): Boolean { + val adjustedElements = elements.map { + when { + it is PsiFile, it is PsiDirectory -> it + it is JetClassOrObject && it.getParent() is JetFile -> it.getParent() + else -> return false + } } - return true; + return super.canMove(adjustedElements.toTypedArray(), targetContainer) } - @Override - public boolean canMove(PsiElement[] elements, @Nullable PsiElement targetContainer) { - ArrayList adjustedElements = new ArrayList(); - for (PsiElement element : elements) { - if (element instanceof PsiFile || element instanceof PsiDirectory) { - adjustedElements.add(element); - continue; - } - - if (element instanceof JetClassOrObject && element.getParent() instanceof JetFile) { - adjustedElements.add(element.getParent()); - continue; - } - - return false; - } - return super.canMove(adjustedElements.toArray(new PsiElement[adjustedElements.size()]), targetContainer); + override fun adjustForMove(project: Project, sourceElements: Array, targetElement: PsiElement?): Array { + return sourceElements.map { if (it is JetClassOrObject) it.getContainingFile() else it }.toTypedArray() } - @Override - public PsiElement[] adjustForMove(Project project, PsiElement[] sourceElements, PsiElement targetElement) { - ArrayList result = new ArrayList(); - for (PsiElement element : sourceElements) { - if (element instanceof JetClassOrObject) { - result.add(element.getContainingFile()); - } - else { - result.add(element); - } + companion object { + public fun isMovableClass(clazz: JetClassOrObject): Boolean { + return clazz.isTopLevel() && clazz.getContainingJetFile().getDeclarations().all { it !is JetClassOrObject || it == clazz } } - return result.toArray(new PsiElement[result.size()]); } }