| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Vim filetype plugin file | 
					
						
							| 
									
										
										
										
											2024-01-14 20:59:02 +01:00
										 |  |  | " Language:		Java | 
					
						
							| 
									
										
										
										
											2024-04-14 19:57:00 +03:00
										 |  |  | " Maintainer:		Aliaksei Budavei <0x000c70 AT gmail DOT com> | 
					
						
							|  |  |  | " Former Maintainer:	Dan Sharp | 
					
						
							|  |  |  | " Repository:		https://github.com/zzzyxwvut/java-vim.git | 
					
						
							| 
									
										
										
										
											2024-12-27 16:46:36 +01:00
										 |  |  | " Last Change:		2024 Dec 25 | 
					
						
							| 
									
										
										
										
											2024-01-14 20:59:02 +01:00
										 |  |  | "			2024 Jan 14 by Vim Project (browsefilter) | 
					
						
							| 
									
										
										
										
											2024-06-03 20:40:45 +02:00
										 |  |  | "			2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Make sure the continuation lines below do not cause problems in | 
					
						
							|  |  |  | " compatibility mode. | 
					
						
							|  |  |  | let s:save_cpo = &cpo | 
					
						
							|  |  |  | set cpo-=C | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-30 19:40:04 +02:00
										 |  |  | if (exists("g:java_ignore_javadoc") || exists("g:java_ignore_markdown")) && | 
					
						
							|  |  |  | 	\ exists("*javaformat#RemoveCommonMarkdownWhitespace") | 
					
						
							|  |  |  |     delfunction javaformat#RemoveCommonMarkdownWhitespace | 
					
						
							|  |  |  |     unlet! g:loaded_javaformat | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if exists("b:did_ftplugin") | 
					
						
							|  |  |  |     let &cpo = s:save_cpo | 
					
						
							|  |  |  |     unlet s:save_cpo | 
					
						
							|  |  |  |     finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let b:did_ftplugin = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " For filename completion, prefer the .java extension over the .class | 
					
						
							|  |  |  | " extension. | 
					
						
							|  |  |  | set suffixes+=.class | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Enable gf on import statements.  Convert . in the package | 
					
						
							|  |  |  | " name to / and append .java to the name, then search the path. | 
					
						
							|  |  |  | setlocal includeexpr=substitute(v:fname,'\\.','/','g') | 
					
						
							|  |  |  | setlocal suffixesadd=.java | 
					
						
							| 
									
										
										
										
											2024-04-18 23:01:52 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Clean up in case this file is sourced again. | 
					
						
							|  |  |  | unlet! s:zip_func_upgradable | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-30 19:40:04 +02:00
										 |  |  | """" STRIVE TO REMAIN COMPATIBLE FOR AT LEAST VIM 7.0. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-18 23:01:52 +02:00
										 |  |  | " Documented in ":help ft-java-plugin". | 
					
						
							|  |  |  | if exists("g:ftplugin_java_source_path") && | 
					
						
							|  |  |  | 		\ type(g:ftplugin_java_source_path) == type("") | 
					
						
							|  |  |  |     if filereadable(g:ftplugin_java_source_path) | 
					
						
							|  |  |  | 	if exists("#zip") && | 
					
						
							|  |  |  | 		    \ g:ftplugin_java_source_path =~# '.\.\%(jar\|zip\)$' | 
					
						
							|  |  |  | 	    if !exists("s:zip_files") | 
					
						
							|  |  |  | 		let s:zip_files = {} | 
					
						
							|  |  |  | 	    endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	    let s:zip_files[bufnr('%')] = g:ftplugin_java_source_path | 
					
						
							|  |  |  | 	    let s:zip_files[0] = g:ftplugin_java_source_path | 
					
						
							|  |  |  | 	    let s:zip_func_upgradable = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	    function! JavaFileTypeZipFile() abort | 
					
						
							|  |  |  | 		let @/ = substitute(v:fname, '\.', '\\/', 'g') . '.java' | 
					
						
							|  |  |  | 		return get(s:zip_files, bufnr('%'), s:zip_files[0]) | 
					
						
							|  |  |  | 	    endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	    " E120 for "inex=s:JavaFileTypeZipFile()" before v8.2.3900. | 
					
						
							|  |  |  | 	    setlocal includeexpr=JavaFileTypeZipFile() | 
					
						
							|  |  |  | 	    setlocal suffixesadd< | 
					
						
							|  |  |  | 	endif | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  | 	let &l:path = g:ftplugin_java_source_path . ',' . &l:path | 
					
						
							|  |  |  |     endif | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Set 'formatoptions' to break comment lines but not other lines, | 
					
						
							|  |  |  | " and insert the comment leader when hitting <CR> or using "o". | 
					
						
							|  |  |  | setlocal formatoptions-=t formatoptions+=croql | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-30 19:40:04 +02:00
										 |  |  | " Set 'comments' to format Markdown Javadoc comments and dashed lists | 
					
						
							|  |  |  | " in other multi-line comments (it behaves just like C). | 
					
						
							|  |  |  | setlocal comments& comments^=:///,sO:*\ -,mO:*\ \ ,exO:*/ | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-03 20:40:45 +02:00
										 |  |  | setlocal commentstring=//\ %s | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Change the :browse e filter to primarily show Java-related files. | 
					
						
							| 
									
										
										
										
											2024-01-14 20:59:02 +01:00
										 |  |  | if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |     let  b:browsefilter="Java Files (*.java)\t*.java\n" . | 
					
						
							|  |  |  | 		\	"Properties Files (*.prop*)\t*.prop*\n" . | 
					
						
							| 
									
										
										
										
											2024-01-14 20:59:02 +01:00
										 |  |  | 		\	"Manifest Files (*.mf)\t*.mf\n" | 
					
						
							|  |  |  |     if has("win32") | 
					
						
							|  |  |  | 	let b:browsefilter .= "All Files (*.*)\t*\n" | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  | 	let b:browsefilter .= "All Files (*)\t*\n" | 
					
						
							|  |  |  |     endif | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  | """" Support pre- and post-compiler actions for SpotBugs. | 
					
						
							|  |  |  | if (!empty(get(g:, 'spotbugs_properties', {})) || | 
					
						
							|  |  |  | 	\ !empty(get(b:, 'spotbugs_properties', {}))) && | 
					
						
							|  |  |  | 	\ filereadable($VIMRUNTIME . '/compiler/spotbugs.vim') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function! s:SpotBugsGetProperty(name, default) abort | 
					
						
							|  |  |  | 	return get( | 
					
						
							|  |  |  | 	    \ {s:spotbugs_properties_scope}spotbugs_properties, | 
					
						
							|  |  |  | 	    \ a:name, | 
					
						
							|  |  |  | 	    \ a:default) | 
					
						
							|  |  |  |     endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function! s:SpotBugsHasProperty(name) abort | 
					
						
							|  |  |  | 	return has_key( | 
					
						
							|  |  |  | 	    \ {s:spotbugs_properties_scope}spotbugs_properties, | 
					
						
							|  |  |  | 	    \ a:name) | 
					
						
							|  |  |  |     endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function! s:SpotBugsGetProperties() abort | 
					
						
							|  |  |  | 	return {s:spotbugs_properties_scope}spotbugs_properties | 
					
						
							|  |  |  |     endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     " Work around ":bar"s and ":autocmd"s. | 
					
						
							| 
									
										
										
										
											2024-12-27 16:46:36 +01:00
										 |  |  |     function! JavaFileTypeExecuteActionOnce(cleanup_cmd, action_cmd) abort | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  | 	try | 
					
						
							|  |  |  | 	    execute a:cleanup_cmd | 
					
						
							|  |  |  | 	finally | 
					
						
							|  |  |  | 	    execute a:action_cmd | 
					
						
							|  |  |  | 	endtry | 
					
						
							|  |  |  |     endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if exists("b:spotbugs_properties") | 
					
						
							|  |  |  | 	let s:spotbugs_properties_scope = 'b:' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	" Merge global entries, if any, in buffer-local entries, favouring | 
					
						
							|  |  |  | 	" defined buffer-local ones. | 
					
						
							|  |  |  | 	call extend( | 
					
						
							|  |  |  | 	    \ b:spotbugs_properties, | 
					
						
							|  |  |  | 	    \ get(g:, 'spotbugs_properties', {}), | 
					
						
							|  |  |  | 	    \ 'keep') | 
					
						
							|  |  |  |     elseif exists("g:spotbugs_properties") | 
					
						
							|  |  |  | 	let s:spotbugs_properties_scope = 'g:' | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let s:commands = {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for s:name in ['DefaultPreCompilerCommand', | 
					
						
							|  |  |  | 	    \ 'DefaultPreCompilerTestCommand', | 
					
						
							|  |  |  | 	    \ 'DefaultPostCompilerCommand'] | 
					
						
							|  |  |  | 	if s:SpotBugsHasProperty(s:name) | 
					
						
							|  |  |  | 	    let s:commands[s:name] = remove( | 
					
						
							|  |  |  | 		\ s:SpotBugsGetProperties(), | 
					
						
							|  |  |  | 		\ s:name) | 
					
						
							|  |  |  | 	endif | 
					
						
							|  |  |  |     endfor | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if s:SpotBugsHasProperty('compiler') | 
					
						
							|  |  |  | 	" XXX: Postpone loading the script until all state, if any, has been | 
					
						
							|  |  |  | 	" collected. | 
					
						
							|  |  |  | 	if !empty(s:commands) | 
					
						
							|  |  |  | 	    let g:spotbugs#state = { | 
					
						
							|  |  |  | 		\ 'compiler': remove(s:SpotBugsGetProperties(), 'compiler'), | 
					
						
							|  |  |  | 		\ 'commands': copy(s:commands), | 
					
						
							|  |  |  | 	    \ } | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 	    let g:spotbugs#state = { | 
					
						
							|  |  |  | 		\ 'compiler': remove(s:SpotBugsGetProperties(), 'compiler'), | 
					
						
							|  |  |  | 	    \ } | 
					
						
							|  |  |  | 	endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	" Merge default entries in global (or buffer-local) entries, favouring | 
					
						
							|  |  |  | 	" defined global (or buffer-local) ones. | 
					
						
							|  |  |  | 	call extend( | 
					
						
							|  |  |  | 	    \ {s:spotbugs_properties_scope}spotbugs_properties, | 
					
						
							|  |  |  | 	    \ spotbugs#DefaultProperties(), | 
					
						
							|  |  |  | 	    \ 'keep') | 
					
						
							|  |  |  |     elseif !empty(s:commands) | 
					
						
							|  |  |  | 	" XXX: Postpone loading the script until all state, if any, has been | 
					
						
							|  |  |  | 	" collected. | 
					
						
							|  |  |  | 	let g:spotbugs#state = {'commands': copy(s:commands)} | 
					
						
							|  |  |  |     endif | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  |     unlet s:commands s:name | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  |     let s:request = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  |     if s:SpotBugsHasProperty('PostCompilerAction') | 
					
						
							|  |  |  | 	let s:request += 4 | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  |     endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  |     if s:SpotBugsHasProperty('PreCompilerTestAction') | 
					
						
							|  |  |  | 	let s:dispatcher = printf('call call(%s, [])', | 
					
						
							|  |  |  | 	    \ string(s:SpotBugsGetProperties().PreCompilerTestAction)) | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | 	let s:request += 2 | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  |     if s:SpotBugsHasProperty('PreCompilerAction') | 
					
						
							|  |  |  | 	let s:dispatcher = printf('call call(%s, [])', | 
					
						
							|  |  |  | 	    \ string(s:SpotBugsGetProperties().PreCompilerAction)) | 
					
						
							|  |  |  | 	let s:request += 1 | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  |     endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  |     " Adapt the tests for "s:FindClassFiles()" from "compiler/spotbugs.vim". | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  |     if (s:request == 3 || s:request == 7) && | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  | 	    \ (!empty(s:SpotBugsGetProperty('sourceDirPath', [])) && | 
					
						
							|  |  |  | 		\ !empty(s:SpotBugsGetProperty('classDirPath', [])) && | 
					
						
							|  |  |  | 	    \ !empty(s:SpotBugsGetProperty('testSourceDirPath', [])) && | 
					
						
							|  |  |  | 		\ !empty(s:SpotBugsGetProperty('testClassDirPath', []))) | 
					
						
							|  |  |  | 	function! s:DispatchAction(paths_action_pairs) abort | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | 	    let name = expand('%:p') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  | 	    for [paths, Action] in a:paths_action_pairs | 
					
						
							|  |  |  | 		for path in paths | 
					
						
							|  |  |  | 		    if name =~# (path . '.\{-}\.java\=$') | 
					
						
							|  |  |  | 			call Action() | 
					
						
							|  |  |  | 			return | 
					
						
							|  |  |  | 		    endif | 
					
						
							|  |  |  | 		endfor | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | 	    endfor | 
					
						
							|  |  |  | 	endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  | 	let s:dir_cnt = min([ | 
					
						
							|  |  |  | 	    \ len(s:SpotBugsGetProperties().sourceDirPath), | 
					
						
							|  |  |  | 	    \ len(s:SpotBugsGetProperties().classDirPath)]) | 
					
						
							|  |  |  | 	let s:test_dir_cnt = min([ | 
					
						
							|  |  |  | 	    \ len(s:SpotBugsGetProperties().testSourceDirPath), | 
					
						
							|  |  |  | 	    \ len(s:SpotBugsGetProperties().testClassDirPath)]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	" Do not break up path pairs with filtering! | 
					
						
							|  |  |  | 	let s:dispatcher = printf('call s:DispatchAction(%s)', | 
					
						
							|  |  |  | 	    \ string([[s:SpotBugsGetProperties().sourceDirPath[0 : s:dir_cnt - 1], | 
					
						
							|  |  |  | 			\ s:SpotBugsGetProperties().PreCompilerAction], | 
					
						
							|  |  |  | 		\ [s:SpotBugsGetProperties().testSourceDirPath[0 : s:test_dir_cnt - 1], | 
					
						
							|  |  |  | 			\ s:SpotBugsGetProperties().PreCompilerTestAction]])) | 
					
						
							|  |  |  | 	unlet s:test_dir_cnt s:dir_cnt | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if exists("s:dispatcher") | 
					
						
							|  |  |  | 	function! s:ExecuteActions(pre_action, post_action) abort | 
					
						
							|  |  |  | 	    try | 
					
						
							|  |  |  | 		execute a:pre_action | 
					
						
							|  |  |  | 	    catch /\<E42:/ | 
					
						
							|  |  |  | 		execute a:post_action | 
					
						
							|  |  |  | 	    endtry | 
					
						
							|  |  |  | 	endfunction | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  |     endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if s:request | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  | 	if exists("b:spotbugs_syntax_once") || empty(join(getline(1, 8), '')) | 
					
						
							|  |  |  | 	    let s:actions = [{'event': 'User'}] | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | 	else | 
					
						
							|  |  |  | 	    " XXX: Handle multiple FileType events when vimrc contains more | 
					
						
							|  |  |  | 	    " than one filetype setting for the language, e.g.: | 
					
						
							|  |  |  | 	    "	:filetype plugin indent on | 
					
						
							|  |  |  | 	    "	:autocmd BufRead,BufNewFile *.java setlocal filetype=java ... | 
					
						
							|  |  |  | 	    " XXX: DO NOT ADD b:spotbugs_syntax_once TO b:undo_ftplugin ! | 
					
						
							|  |  |  | 	    let b:spotbugs_syntax_once = 1 | 
					
						
							|  |  |  | 	    let s:actions = [{ | 
					
						
							|  |  |  | 		    \ 'event': 'Syntax', | 
					
						
							|  |  |  | 		    \ 'once': 1, | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  | 		\ }, { | 
					
						
							|  |  |  | 		    \ 'event': 'User', | 
					
						
							|  |  |  | 		\ }] | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | 	endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for s:idx in range(len(s:actions)) | 
					
						
							|  |  |  | 	    if s:request == 7 || s:request == 6 || s:request == 5 | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  | 		let s:actions[s:idx].cmd = printf('call s:ExecuteActions(%s, %s)', | 
					
						
							|  |  |  | 		    \ string(s:dispatcher), | 
					
						
							|  |  |  | 		    \ string(printf('compiler spotbugs | call call(%s, [])', | 
					
						
							|  |  |  | 			\ string(s:SpotBugsGetProperties().PostCompilerAction)))) | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | 	    elseif s:request == 4 | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  | 		let s:actions[s:idx].cmd = printf( | 
					
						
							|  |  |  | 		    \ 'compiler spotbugs | call call(%s, [])', | 
					
						
							|  |  |  | 		    \ string(s:SpotBugsGetProperties().PostCompilerAction)) | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | 	    elseif s:request == 3 || s:request == 2 || s:request == 1 | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  | 		let s:actions[s:idx].cmd = printf('call s:ExecuteActions(%s, %s)', | 
					
						
							|  |  |  | 		    \ string(s:dispatcher), | 
					
						
							|  |  |  | 		    \ string('compiler spotbugs')) | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | 	    else | 
					
						
							|  |  |  | 		let s:actions[s:idx].cmd = '' | 
					
						
							|  |  |  | 	    endif | 
					
						
							|  |  |  | 	endfor | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if !exists("#java_spotbugs") | 
					
						
							|  |  |  | 	    augroup java_spotbugs | 
					
						
							|  |  |  | 	    augroup END | 
					
						
							|  |  |  | 	endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	" The events are defined in s:actions. | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  | 	silent! autocmd! java_spotbugs User <buffer> | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | 	silent! autocmd! java_spotbugs Syntax <buffer> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for s:action in s:actions | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  | 	    if has_key(s:action, 'once') | 
					
						
							|  |  |  | 		execute printf('autocmd java_spotbugs %s <buffer> ' . | 
					
						
							| 
									
										
										
										
											2024-12-27 16:46:36 +01:00
										 |  |  | 			\ 'call JavaFileTypeExecuteActionOnce(%s, %s)', | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | 		    \ s:action.event, | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  | 		    \ string(printf('autocmd! java_spotbugs %s <buffer>', | 
					
						
							|  |  |  | 			\ s:action.event)), | 
					
						
							|  |  |  | 		    \ string(s:action.cmd)) | 
					
						
							|  |  |  | 	    else | 
					
						
							|  |  |  | 		execute printf('autocmd java_spotbugs %s <buffer> %s', | 
					
						
							|  |  |  | 		    \ s:action.event, | 
					
						
							|  |  |  | 		    \ s:action.cmd) | 
					
						
							|  |  |  | 	    endif | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | 	endfor | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-27 16:46:36 +01:00
										 |  |  | 	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 | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  |     endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  |     delfunction s:SpotBugsGetProperties | 
					
						
							|  |  |  |     delfunction s:SpotBugsHasProperty | 
					
						
							|  |  |  |     delfunction s:SpotBugsGetProperty | 
					
						
							|  |  |  |     unlet! s:request s:spotbugs_properties_scope | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function! JavaFileTypeCleanUp() abort | 
					
						
							|  |  |  |     setlocal suffixes< suffixesadd< formatoptions< comments< commentstring< path< includeexpr< | 
					
						
							|  |  |  |     unlet! b:browsefilter | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-27 16:46:36 +01:00
										 |  |  |     " The concatenated ":autocmd" removals may be misparsed as an ":autocmd". | 
					
						
							|  |  |  |     " A _once-only_ ShellCmdPost ":autocmd" is always a call-site definition. | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  |     silent! autocmd! java_spotbugs User <buffer> | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  |     silent! autocmd! java_spotbugs Syntax <buffer> | 
					
						
							| 
									
										
										
										
											2024-12-27 16:46:36 +01:00
										 |  |  |     silent! autocmd! java_spotbugs_post User <buffer> | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Undo the stuff we changed. | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | let b:undo_ftplugin = 'call JavaFileTypeCleanUp() | delfunction JavaFileTypeCleanUp' | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-18 23:01:52 +02:00
										 |  |  | " See ":help vim9-mix". | 
					
						
							|  |  |  | if !has("vim9script") | 
					
						
							|  |  |  |     let &cpo = s:save_cpo | 
					
						
							|  |  |  |     unlet s:save_cpo | 
					
						
							|  |  |  |     finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if exists("s:zip_func_upgradable") | 
					
						
							|  |  |  |     delfunction! JavaFileTypeZipFile | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def! s:JavaFileTypeZipFile(): string | 
					
						
							|  |  |  | 	@/ = substitute(v:fname, '\.', '\\/', 'g') .. '.java' | 
					
						
							|  |  |  | 	return get(zip_files, bufnr('%'), zip_files[0]) | 
					
						
							|  |  |  |     enddef | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     setlocal includeexpr=s:JavaFileTypeZipFile() | 
					
						
							|  |  |  |     setlocal suffixesadd< | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | if exists("*s:DispatchAction") | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  |     def! s:DispatchAction(paths_action_pairs: list<list<any>>) | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | 	const name: string = expand('%:p') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-16 21:37:54 +01:00
										 |  |  | 	for [paths: list<string>, Action: func: any] in paths_action_pairs | 
					
						
							|  |  |  | 	    for path in paths | 
					
						
							|  |  |  | 		if name =~# (path .. '.\{-}\.java\=$') | 
					
						
							|  |  |  | 		    Action() | 
					
						
							|  |  |  | 		    return | 
					
						
							|  |  |  | 		endif | 
					
						
							|  |  |  | 	    endfor | 
					
						
							| 
									
										
										
										
											2024-11-28 21:06:09 +01:00
										 |  |  | 	endfor | 
					
						
							|  |  |  |     enddef | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Restore the saved compatibility options. | 
					
						
							|  |  |  | let &cpo = s:save_cpo | 
					
						
							| 
									
										
										
										
											2012-03-11 15:57:40 +01:00
										 |  |  | unlet s:save_cpo | 
					
						
							| 
									
										
										
										
											2024-09-30 19:40:04 +02:00
										 |  |  | " vim: fdm=syntax sw=4 ts=8 noet sta |