boolean (@NotNull Editor editor, @NotNull PsiFile file, @NotNull MoveInfo info, boolean down) { if (!super.checkAvailable(editor, file, info, down)) return false; LineRange oldRange = info.toMove; Pair<PsiElement, PsiElement> psiRange = getElementRange(editor, file, oldRange); if (psiRange == null) return false; KtDeclaration firstDecl = getMovableDeclaration(psiRange.getFirst()); if (firstDecl == null) return false; moveEnumConstant = firstDecl instanceof KtEnumEntry; KtDeclaration lastDecl = getMovableDeclaration(psiRange.getSecond()); if (lastDecl == null) return false; //noinspection ConstantConditions LineRange sourceRange = getSourceRange(firstDecl, lastDecl, editor, oldRange); if (sourceRange == null) return false; PsiElement sibling = getLastNonWhiteSiblingInLine(firstNonWhiteSibling(sourceRange, down), editor, down); if (sibling == null || sibling instanceof KtPackageDirective || sibling instanceof KtImportList) { info.toMove2 = null; return true; } moveOutOfBlock = isMovingOutOfBlock(sibling, down); moveIntoBlock = getClassBody(sibling) != null; info.toMove = sourceRange; info.toMove2 = getTargetRange(editor, sibling, down, sourceRange.firstElement); return true; }