diff options
Diffstat (limited to 'runtime/ftplugin/java.vim')
| -rw-r--r-- | runtime/ftplugin/java.vim | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/runtime/ftplugin/java.vim b/runtime/ftplugin/java.vim index cfd25bce6c..4a08c57dd4 100644 --- a/runtime/ftplugin/java.vim +++ b/runtime/ftplugin/java.vim @@ -3,9 +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 25 -" 2024 Jan 14 by Vim Project (browsefilter) -" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') +" Last Change: 2025 May 08 " Make sure the continuation lines below do not cause problems in " compatibility mode. @@ -30,6 +28,32 @@ let b:did_ftplugin = 1 " extension. set suffixes+=.class +" Set up "&define" and "&include". +let s:peek = '' + +try + " Since v7.3.1037. + if 'ab' !~ 'a\@1<!b' + let s:peek = string(strlen('instanceof') + 8) + endif +catch /\<E59:/ +endtry + +" Treat "s:common" as a non-backtracking unit to avoid matching constructor +" declarations whose package-private headers are indistinguishable from method +" invocation. Note that "[@-]" must not and "$" may not be in "&l:iskeyword". +let s:common = '\%(\%(\%(@\%(interface\)\@!\%(\K\k*\.\)*\K\k*\)\s\+\)*' . + \ '\%(p\%(rivate\|rotected\|ublic\)\s\+\)\=\)\@>' +let s:types = '\%(\%(abstract\|final\|non-sealed\|s\%(ealed\|tatic\|trictfp\)\)\s\+\)*' . + \ '\%(class\|enum\|@\=interface\|record\)\s\+\ze\K\k*\>' +let s:methods = '\%(\%(abstract\|default\|final\|native\|s\%(tatic\|trictfp\|ynchronized\)\)\s\+\)*' . + \ '\%(<.\{-1,}>\s\+\)\=\%(\K\k*\.\)*\K\k*\s*\%(<.\{-1,}>\%(\s\|\[\)\@=\)\=\s*\%(\[\]\s*\)*' . + \ '\s\+\ze\%(\<\%(assert\|case\|instanceof\|new\|return\|throw\|when\)\s\+\)\@' . + \ s:peek . '<!\K\k*\s*(' +let &l:define = printf('\C\m^\s*%s\%%(%s\|%s\)', s:common, s:types, s:methods) +let &l:include = '\C\m^\s*import\s\+\ze\%(\K\k*\.\)\+\K\k*;' +unlet s:methods s:types s:common s:peek + " 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') @@ -341,7 +365,7 @@ if (!empty(get(g:, 'spotbugs_properties', {})) || endif function! JavaFileTypeCleanUp() abort - setlocal suffixes< suffixesadd< formatoptions< comments< commentstring< path< includeexpr< + setlocal suffixes< suffixesadd< formatoptions< comments< commentstring< path< includeexpr< include< define< unlet! b:browsefilter " The concatenated ":autocmd" removals may be misparsed as an ":autocmd". |