boolean (@NotNull final Document document, int lineNumber, @NotNull final PsiElement elementToMove1, boolean down) { int start = document.getLineStartOffset(lineNumber); final int end = document.getLineEndOffset(lineNumber); int nearLine = down ? lineNumber + 1 : lineNumber - 1; if (nearLine >= document.getLineCount() || nearLine <= 0) return false; final PyStringLiteralExpression stringLiteralExpression = PsiTreeUtil.getParentOfType(elementToMove1, PyStringLiteralExpression.class); if (stringLiteralExpression != null) { final Pair<String,String> quotes = PyStringLiteralCoreUtil.getQuotes(stringLiteralExpression.getText()); if (quotes != null && (quotes.first.equals("'''") || quotes.first.equals("\"\"\""))) { final String text1 = document.getText(TextRange.create(start, end)).trim(); final String text2 = document.getText(TextRange.create(document.getLineStartOffset(nearLine), document.getLineEndOffset(nearLine))).trim(); if (!text1.startsWith(quotes.first) && !text1.endsWith(quotes.second) && !text2.startsWith(quotes.first) && !text2.endsWith(quotes.second)) return true; } } return false; }