Convert to Kotlin: KotlinMoveFilesOrDirectoriesHandler.kt
This commit is contained in:
@@ -38,7 +38,7 @@ public class JetCopyClassHandler extends CopyHandlerDelegateBase {
|
|||||||
|
|
||||||
private static PsiElement replaceElement(PsiElement element) {
|
private static PsiElement replaceElement(PsiElement element) {
|
||||||
if (element instanceof JetClassOrObject &&
|
if (element instanceof JetClassOrObject &&
|
||||||
KotlinMoveFilesOrDirectoriesHandler.isMovableClass((JetClassOrObject) element)) {
|
KotlinMoveFilesOrDirectoriesHandler.Companion.isMovableClass((JetClassOrObject) element)) {
|
||||||
return element.getContainingFile();
|
return element.getContainingFile();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
+22
-49
@@ -14,62 +14,35 @@
|
|||||||
* limitations under the License.
|
* 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.openapi.project.Project
|
||||||
import com.intellij.psi.PsiDirectory;
|
import com.intellij.psi.PsiDirectory
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile
|
||||||
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesHandler;
|
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesHandler
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.kotlin.psi.JetClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.JetClassOrObject;
|
import org.jetbrains.kotlin.psi.JetFile
|
||||||
import org.jetbrains.kotlin.psi.JetDeclaration;
|
|
||||||
import org.jetbrains.kotlin.psi.JetFile;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
public class KotlinMoveFilesOrDirectoriesHandler : MoveFilesOrDirectoriesHandler() {
|
||||||
import java.util.List;
|
override fun canMove(elements: Array<PsiElement>, targetContainer: PsiElement?): Boolean {
|
||||||
|
val adjustedElements = elements.map {
|
||||||
public class KotlinMoveFilesOrDirectoriesHandler extends MoveFilesOrDirectoriesHandler {
|
when {
|
||||||
public static boolean isMovableClass(JetClassOrObject clazz) {
|
it is PsiFile, it is PsiDirectory -> it
|
||||||
if (!(clazz.getParent() instanceof JetFile)) return false;
|
it is JetClassOrObject && it.getParent() is JetFile -> it.getParent()
|
||||||
JetFile file = clazz.getContainingJetFile();
|
else -> return false
|
||||||
List<JetDeclaration> declarations = file.getDeclarations();
|
}
|
||||||
for (JetDeclaration declaration : declarations) {
|
|
||||||
if (declaration instanceof JetClassOrObject && declaration != clazz) return false;
|
|
||||||
}
|
}
|
||||||
return true;
|
return super.canMove(adjustedElements.toTypedArray(), targetContainer)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
override fun adjustForMove(project: Project, sourceElements: Array<PsiElement>, targetElement: PsiElement?): Array<PsiElement> {
|
||||||
public boolean canMove(PsiElement[] elements, @Nullable PsiElement targetContainer) {
|
return sourceElements.map { if (it is JetClassOrObject) it.getContainingFile() else it }.toTypedArray()
|
||||||
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
|
companion object {
|
||||||
public PsiElement[] adjustForMove(Project project, PsiElement[] sourceElements, PsiElement targetElement) {
|
public fun isMovableClass(clazz: JetClassOrObject): Boolean {
|
||||||
ArrayList<PsiElement> result = new ArrayList<PsiElement>();
|
return clazz.isTopLevel() && clazz.getContainingJetFile().getDeclarations().all { it !is JetClassOrObject || it == clazz }
|
||||||
for (PsiElement element : sourceElements) {
|
|
||||||
if (element instanceof JetClassOrObject) {
|
|
||||||
result.add(element.getContainingFile());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
result.add(element);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return result.toArray(new PsiElement[result.size()]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user