aboutsummaryrefslogtreecommitdiff
path: root/runtime/ftplugin/java.vim
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-12-28 07:32:08 +0800
committerzeertzjq <zeertzjq@outlook.com>2025-02-04 06:45:25 +0800
commit89c294514853ee4849855f880d6d7ff349494c4d (patch)
treec9e47794be4f9f2c0afc1f43b0d6dbfb5832f8df /runtime/ftplugin/java.vim
parentd7426bc9e99a44e5c79a3645aa74fc2a300e3ae6 (diff)
downloadrneovim-89c294514853ee4849855f880d6d7ff349494c4d.tar.gz
rneovim-89c294514853ee4849855f880d6d7ff349494c4d.tar.bz2
rneovim-89c294514853ee4849855f880d6d7ff349494c4d.zip
vim-patch:9.1.0967: SpotBugs compiler setup can be further improved
Problem: SpotBugs compiler can be further improved Solution: Introduce event-driven primitives for SpotBugs (Aliaksei Budavei) closes: vim/vim#16258 https://github.com/vim/vim/commit/2e252474c4df5018b9819d86ebb70bf3b1b1a1af Co-authored-by: Aliaksei Budavei <0x000c70@gmail.com>
Diffstat (limited to 'runtime/ftplugin/java.vim')
-rw-r--r--runtime/ftplugin/java.vim46
1 files changed, 41 insertions, 5 deletions
diff --git a/runtime/ftplugin/java.vim b/runtime/ftplugin/java.vim
index 0fa773335d..cfd25bce6c 100644
--- a/runtime/ftplugin/java.vim
+++ b/runtime/ftplugin/java.vim
@@ -3,7 +3,7 @@
" Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com>
" Former Maintainer: Dan Sharp
" Repository: https://github.com/zzzyxwvut/java-vim.git
-" Last Change: 2024 Dec 16
+" Last Change: 2024 Dec 25
" 2024 Jan 14 by Vim Project (browsefilter)
" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring')
@@ -113,7 +113,7 @@ if (!empty(get(g:, 'spotbugs_properties', {})) ||
endfunction
" Work around ":bar"s and ":autocmd"s.
- function! s:ExecuteActionOnce(cleanup_cmd, action_cmd) abort
+ function! JavaFileTypeExecuteActionOnce(cleanup_cmd, action_cmd) abort
try
execute a:cleanup_cmd
finally
@@ -285,7 +285,7 @@ if (!empty(get(g:, 'spotbugs_properties', {})) ||
for s:action in s:actions
if has_key(s:action, 'once')
execute printf('autocmd java_spotbugs %s <buffer> ' .
- \ 'call s:ExecuteActionOnce(%s, %s)',
+ \ 'call JavaFileTypeExecuteActionOnce(%s, %s)',
\ s:action.event,
\ string(printf('autocmd! java_spotbugs %s <buffer>',
\ s:action.event)),
@@ -297,7 +297,41 @@ if (!empty(get(g:, 'spotbugs_properties', {})) ||
endif
endfor
- unlet! s:action s:actions s:idx s:dispatcher
+ if s:SpotBugsHasProperty('PostCompilerActionExecutor') &&
+ \ (s:request == 7 || s:request == 6 ||
+ \ s:request == 5 || s:request == 4)
+ let s:augroup = s:SpotBugsGetProperty(
+ \ 'augroupForPostCompilerAction',
+ \ 'java_spotbugs_post')
+ let s:augroup = !empty(s:augroup) ? s:augroup : 'java_spotbugs_post'
+
+ for s:candidate in ['java_spotbugs_post', s:augroup]
+ if !exists("#" . s:candidate)
+ execute printf('augroup %s | augroup END', s:candidate)
+ endif
+ endfor
+
+ silent! autocmd! java_spotbugs_post User <buffer>
+
+ " Define a User ":autocmd" to define a once-only ShellCmdPost
+ " ":autocmd" that will invoke "PostCompilerActionExecutor" and let
+ " it decide whether to proceed with ":compiler spotbugs" etc.; and
+ " seek explicit synchronisation with ":doautocmd ShellCmdPost" by
+ " omitting "nested" for "java_spotbugs_post" and "java_spotbugs".
+ execute printf('autocmd java_spotbugs_post User <buffer> ' .
+ \ 'call JavaFileTypeExecuteActionOnce(%s, %s)',
+ \ string(printf('autocmd! %s ShellCmdPost <buffer>', s:augroup)),
+ \ string(printf('autocmd %s ShellCmdPost <buffer> ' .
+ \ 'call JavaFileTypeExecuteActionOnce(%s, %s)',
+ \ s:augroup,
+ \ string(printf('autocmd! %s ShellCmdPost <buffer>', s:augroup)),
+ \ string(printf('call call(%s, [%s])',
+ \ string(s:SpotBugsGetProperties().PostCompilerActionExecutor),
+ \ string(printf('compiler spotbugs | call call(%s, [])',
+ \ string(s:SpotBugsGetProperties().PostCompilerAction))))))))
+ endif
+
+ unlet! s:candidate s:augroup s:action s:actions s:idx s:dispatcher
endif
delfunction s:SpotBugsGetProperties
@@ -310,9 +344,11 @@ function! JavaFileTypeCleanUp() abort
setlocal suffixes< suffixesadd< formatoptions< comments< commentstring< path< includeexpr<
unlet! b:browsefilter
- " The concatenated removals may be misparsed as a User autocmd.
+ " The concatenated ":autocmd" removals may be misparsed as an ":autocmd".
+ " A _once-only_ ShellCmdPost ":autocmd" is always a call-site definition.
silent! autocmd! java_spotbugs User <buffer>
silent! autocmd! java_spotbugs Syntax <buffer>
+ silent! autocmd! java_spotbugs_post User <buffer>
endfunction
" Undo the stuff we changed.