Convert to Kotlin: KotlinMoveFilesOrDirectoriesHandler.kt

This commit is contained in:
Alexey Sedunov
2015-05-15 15:55:02 +03:00
parent e854da386d
commit d88e01e770
2 changed files with 23 additions and 50 deletions
@@ -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 {
@@ -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<JetDeclaration> declarations = file.getDeclarations();
for (JetDeclaration declaration : declarations) {
if (declaration instanceof JetClassOrObject && declaration != clazz) return false;
public class KotlinMoveFilesOrDirectoriesHandler : MoveFilesOrDirectoriesHandler() {
override fun canMove(elements: Array<PsiElement>, 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<PsiElement> adjustedElements = new ArrayList<PsiElement>();
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<PsiElement>, targetElement: PsiElement?): Array<PsiElement> {
return sourceElements.map { if (it is JetClassOrObject) it.getContainingFile() else it }.toTypedArray()
}
@Override
public PsiElement[] adjustForMove(Project project, PsiElement[] sourceElements, PsiElement targetElement) {
ArrayList<PsiElement> result = new ArrayList<PsiElement>();
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()]);
}
}