protected Result splitString(@NotNull PsiFile file,
                             @NotNull Ref<Integer> caretOffsetRef,
                             @NotNull Ref<Integer> caretAdvanceRef,
                             @NotNull PsiElement psiAtOffset,
                             @NotNull Document document,
                             int caretOffset,
                             @NotNull JavaLikeQuoteHandler quoteHandler) {
    ASTNode token = psiAtOffset.getNode();
    CharSequence text = document.getText();

    TextRange range = token.getTextRange();
    final char literalStart = token.getText().charAt(0);
    final StringLiteralLexer lexer = new StringLiteralLexer(literalStart, token.getElementType());
    lexer.start(text, range.getStartOffset(), range.getEndOffset());
    caretOffset = skipStringLiteralEscapes(caretOffset, lexer);
    caretOffset = wrapWithParensIfNeeded(psiAtOffset, document, caretOffset, quoteHandler);
    final String insertedFragment = literalStart + " " + quoteHandler.getStringConcatenationOperatorRepresentation();
    document.insertString(caretOffset, insertedFragment + " " + literalStart);
    caretOffset += insertedFragment.length();
    int caretAdvance = 1;
    if (CodeStyle.getLanguageSettings(file).BINARY_OPERATION_SIGN_ON_NEXT_LINE) {
      caretOffset -= 1;
      caretAdvance = 3;
    }
    caretOffsetRef.set(caretOffset);
    caretAdvanceRef.set(caretAdvance);
    return Result.DefaultForceIndent;
  }
protected Result splitString(@NotNull PsiFile file,
                             @NotNull Ref<Integer> caretOffsetRef,
                             @NotNull Ref<Integer> caretAdvanceRef,
                             @NotNull PsiElement psiAtOffset,
                             @NotNull Document document,
                             int caretOffset,
                             @NotNull JavaLikeQuoteHandler quoteHandler)