" 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.
" 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')
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".