let s:skip = sj#SkipSyntax(['javaComment', 'javaString']) function! sj#java#SplitIfClauseBody() if sj#SearchSkip('^\s*if (.\+) .\+;\?', s:skip, 'bc', line('.')) <= 0 return 0 endif " skip nested () brackets normal! ^w%l let body = sj#Trim(sj#GetMotion('vg_')) if body == '{' " nothing to split return 0 endi if body[0] == '{' let with_curly_brackets = 1 normal! f{ let body = sj#Trim(sj#GetMotion('vi{')) else let with_curly_brackets = 0 endif if body[0] == ')' " normal! l didn't work, body must be on another line, nothing to do here return 0 " elseif body =~ '//\|/*' elseif body =~ '\n' " it's more than one line, nevermind return 0 endif if with_curly_brackets call sj#ReplaceMotion('va{', "{\n".body."\n}") else call sj#ReplaceMotion('vg_', "\n".body) endif return 1 endfunction function! sj#java#JoinIfClauseBody() if sj#SearchSkip('^\s*if\s*(.\+)\s*{$', s:skip, 'e', line('.')) > 0 normal! va{J return 1 elseif sj#SearchSkip('^\s*if\s*(.\+)\s*$', s:skip, 'bc', line('.')) > 0 && \ indent(nextnonblank(line('.') + 1)) > indent(line('.')) normal! J return 1 else return 0 endif endfunction function! sj#java#SplitIfClauseCondition() normal! ^ if sj#SearchSkip('^\s*if\s\+(', s:skip, 'ce', line('.')) <= 0 return 0 endif let start_pos = getpos('.') normal! % let end_pos = getpos('.') if start_pos[1] != end_pos[1] " closing ) was on a different line, don't split return 0 endif if start_pos[2] == end_pos[2] " same column, we didn't move return 0 endif let items = sj#TrimList(split(sj#GetByPosition(start_pos, end_pos), '\ze\(&&\|||\)')) let body = join(items, "\n") call sj#ReplaceByPosition(start_pos, end_pos, body) return 1 endfunction function! sj#java#JoinIfClauseCondition() normal! ^ if sj#SearchSkip('^\s*if\s*(', s:skip, 'ce', line('.')) <= 0 return 0 endif let start_line = line('.') normal! % let end_line = line('.') if start_line == end_line " closing ) was on the same line, nothing to do return 0 endif normal! va)J return 1 endfunction function! sj#java#SplitFuncall() if sj#SearchUnderCursor('(.\{-})', '', s:skip) <= 0 return 0 endif call sj#PushCursor() normal! l let start = col('.') normal! h%h let end = col('.') let items = sj#ParseJsonObjectBody(start, end) if sj#settings#Read('java_argument_split_first_newline') let body = "(\n" else let body = "(" endif let body .= join(items, ",\n") if sj#settings#Read('java_argument_split_last_newline') let body .= "\n)" else let body .= ")" endif call sj#PopCursor() call sj#ReplaceMotion('va(', body) return 1 endfunction function! sj#java#JoinFuncall() if sj#SearchUnderCursor('([^)]*\s*$', '', s:skip) <= 0 return 0 endif let lines = sj#TrimList(split(sj#GetMotion('vi('), "\n")) call sj#ReplaceMotion('va(', '('.join(lines, ' ').')') return 1 endfunction function! sj#java#SplitLambda() if !sj#SearchUnderCursor('\%((.\{})\|\k\+\)\s*->\s*.*$') return 0 endif call search('\%((.\{})\|\k\+\)\s*->\s*\zs.*$', 'W', line('.')) if strpart(getline('.'), col('.') - 1) =~ '^\s*{' " then we have a curly bracket group, easy split: let body = sj#GetMotion('vi{') call sj#ReplaceMotion('vi{', "\nreturn ".sj#Trim(body).";\n") return 1 endif let start_col = col('.') let end_col = sj#JumpBracketsTill('[\])};,]', {'opening': '([{"''', 'closing': ')]}"'''}) let body = sj#GetCols(start_col, end_col) let replacement = "{\nreturn ".body.";\n}" call sj#ReplaceCols(start_col, end_col, replacement) return 1 endfunction function! sj#java#JoinLambda() if !sj#SearchUnderCursor('\%((.\{})\|\k\+\)\s*->\s*{\s*$') return 0 endif normal! $ let body = sj#Trim(sj#GetMotion('vi{')) let body = substitute(body, '^return\s*', '', '') let body = substitute(body, ';$', '', '') call sj#ReplaceMotion('va{', body) return 1 endfunction