Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
java.vim1019 linesDownload Raw Back to syntax
1" Vim syntax file2" Language:		Java3" Maintainer:		Aliaksei Budavei <0x000c70 AT gmail DOT com>4" Former Maintainer:	Claudio Fleiner <claudio@fleiner.com>5" Repository:		https://github.com/zzzyxwvut/java-vim.git6" Last Change:		2026 Mar 227 8" Please check ":help java.vim" for comments on some of the options9" available.10 11" Do not aggregate syntax items from circular inclusion.12if exists("b:current_syntax")13  finish14endif15 16if exists("g:main_syntax")17  " Reject attendant circularity for every :syn-included syntax file,18  " but ACCEPT FAILURE when "g:main_syntax" is set to "java".19  if g:main_syntax == 'html'20    if !exists("g:java_ignore_html")21      let g:java_ignore_html = 122      let s:clear_java_ignore_html = 123    endif24  elseif g:main_syntax == 'markdown'25    if !exists("g:java_ignore_markdown")26      let g:java_ignore_markdown = 127      let s:clear_java_ignore_markdown = 128    endif29  endif30else31  " Allow syntax files that include this file test for its inclusion.32  let g:main_syntax = 'java'33endif34 35let s:cpo_save = &cpo36set cpo&vim37 38"""" STRIVE TO REMAIN COMPATIBLE FOR AT LEAST VIM 7.0.39let s:ff = {}40let s:vv = {}41let s:vv.ignore_folding = get(g:, 'java_ignore_folding', '')42 43function! s:ff.LeftConstant(x, y) abort44  return a:x45endfunction46 47function! s:ff.RightConstant(x, y) abort48  return a:y49endfunction50 51if !empty(get(g:, 'java_syntax_previews', []))52  " Fold the value of "g:java_syntax_previews" in this function.53  exec printf("%s\n%s\n%s",54    \ 'function! s:ff.IsAnyRequestedPreviewFeatureOf(ns) abort',55    \ printf('return !empty(filter(a:ns, "index(%s, v:val) + 1"))',56			\ string(g:java_syntax_previews)),57    \ 'endfunction')58else59  function! s:ff.IsAnyRequestedPreviewFeatureOf(dummy) abort60    return 061  endfunction62endif63 64function! s:ff.QueryFoldArgForSyntaxItems(kind) abort65  return stridx(s:vv.ignore_folding, a:kind) < 0 ? "fold" : ""66endfunction67 68if !exists("*s:ReportOnce")69  function s:ReportOnce(message) abort70    echomsg 'syntax/java.vim: ' . a:message71  endfunction72else73  function! s:ReportOnce(dummy)74  endfunction75endif76 77if exists("g:java_foldtext_show_first_or_second_line")78  function! s:LazyPrefix(prefix, dashes, count) abort79    return empty(a:prefix)80      \ ? printf('+-%s%3d lines: ', a:dashes, a:count)81      \ : a:prefix82  endfunction83 84  function! JavaSyntaxFoldTextExpr() abort85    " Piggyback on NGETTEXT.86    let summary = foldtext()87    return getline(v:foldstart) !~ '/\*\+\s*$'88      \ ? summary89      \ : s:LazyPrefix(matchstr(summary, '^+-\+\s*\d\+\s.\{-1,}:\s'),90			\ v:folddashes,91			\ (v:foldend - v:foldstart + 1)) .92	  \ getline(v:foldstart + 1)93  endfunction94 95  " E120 for "fdt=s:JavaSyntaxFoldTextExpr()" before v8.2.3900.96  setlocal foldtext=JavaSyntaxFoldTextExpr()97endif98 99" Admit the ASCII dollar sign to keyword characters (JLS-17, §3.8):100try101  exec 'syntax iskeyword ' . &l:iskeyword . ',$'102catch /\<E410:/103  call s:ReportOnce(v:exception)104  setlocal iskeyword+=$105endtry106 107" some characters that cannot be in a java program (outside a string)108syn match javaError "[\\@`]"109syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/"110 111" use separate name so that it can be deleted in javacc.vim112syn match   javaError2 "#\|=<"113 114" Keywords (JLS-17, §3.9):115syn keyword javaExternal	native package116syn match   javaExternal	"\<import\>\%(\s\+static\>\)\="117syn keyword javaError		goto const118syn keyword javaConditional	if else switch119syn keyword javaRepeat		while for do120syn keyword javaBoolean		true false121syn keyword javaConstant	null122syn keyword javaTypedef		this super123syn keyword javaOperator	new instanceof124syn match   javaOperator	"\<var\>\%(\s*(\)\@!"125 126" Module imports can be used in any source file.127syn match   javaExternal	"\<import\s\+module\>" contains=javaModuleImport128syn keyword javaModuleImport	contained module129 130if !empty(s:ff.QueryFoldArgForSyntaxItems('i'))131  " Group and fold adjacent "import" declarations.132  syn region  javaImportDeclBlock	transparent start="\<import\s\+\K" skip="\<import\s\+\K" end="^" contains=javaExternal,@javaClasses,javaComment,javaLineComment fold133endif134 135" Since the yield statement, which could take a parenthesised operand,136" and _qualified_ yield methods get along within the switch block137" (JLS-17, §3.8), it seems futile to make a region definition for this138" block; instead look for the _yield_ word alone, and if found,139" backtrack (arbitrarily) 80 bytes, at most, on the matched line and,140" if necessary, on the line before that (h: \@<=), trying to match141" neither a method reference nor a qualified method invocation.142try143  if !empty(get(g:, 'java_lookbehind_byte_counts', {}))144    exec 'syn match javaOperator "\%(\%(::\|\.\)[[:space:]\n]*\)\@' . max([0, get(g:java_lookbehind_byte_counts, 'javaOperator', 80)]) . '<!\<yield\>"'145 146    function! s:ff.PeekFor(item, count) abort147      return string(max([0, get(g:java_lookbehind_byte_counts, a:item, a:count)]))148    endfunction149  else150    syn match  javaOperator	"\%(\%(::\|\.\)[[:space:]\n]*\)\@80<!\<yield\>"151 152    function! s:ff.PeekFor(dummy, count) abort153      return string(a:count)154    endfunction155  endif156 157  let s:ff.Peek = s:ff.LeftConstant158catch /\<E59:/159  call s:ReportOnce(v:exception)160  syn match  javaOperator	"\%(\%(::\|\.\)[[:space:]\n]*\)\@<!\<yield\>"161 162  function! s:ff.PeekFor(dummy_a, dummy_b) abort163    return ""164  endfunction165 166  let s:ff.Peek = s:ff.RightConstant167endtry168 169syn keyword javaType		boolean char byte short int long float double170syn keyword javaType		void171syn keyword javaStatement	return172syn keyword javaStorageClass	static synchronized transient volatile strictfp173syn keyword javaExceptions	throw try catch finally174syn keyword javaAssert		assert175syn keyword javaMethodDecl	throws176" Differentiate a "MyClass.class" literal from the keyword "class".177syn match   javaTypedef		"\.\s*\<class\>"ms=s+1178syn keyword javaClassDecl	enum extends implements interface179syn match   javaClassDecl	"\<permits\>\%(\s*(\)\@!"180syn match   javaClassDecl	"\<record\>\%(\s*(\)\@!"181syn match   javaClassDecl	"^class\>"182syn match   javaClassDecl	"[^.]\s*\<class\>"ms=s+1183syn match   javaAnnotation	"@\%(\K\k*\.\)*\K\k*\>"184syn region  javaAnnotation	transparent matchgroup=javaAnnotationStart start=/@\%(\K\k*\.\)*\K\k*(/ end=/)/ skip=/\/\*.\{-}\*\/\|\/\/.*$/ contains=javaAnnotation,javaParenT,javaBlock,javaString,javaBoolean,javaNumber,javaTypedef,javaComment,javaLineComment185syn match   javaClassDecl	"@interface\>"186syn keyword javaBranch		break continue nextgroup=javaUserLabelRef skipwhite187syn match   javaUserLabelRef	contained "\k\+"188syn match   javaVarArg		"\.\.\."189syn keyword javaScopeDecl	public protected private190syn keyword javaConceptKind	abstract final191syn match   javaConceptKind	"\<non-sealed\>"192syn match   javaConceptKind	"\<sealed\>\%(\s*(\)\@!"193syn match   javaConceptKind	"\<default\>\%(\s*\%(:\|->\)\)\@!"194 195if !(v:version < 704)196  " Request the new regexp engine for [:upper:] and [:lower:].197  let [s:ff.Engine, s:ff.UpperCase, s:ff.LowerCase] = repeat([s:ff.LeftConstant], 3)198else199  " XXX: \C\<[^a-z0-9]\k*\> rejects "type", but matches "τύπος".200  " XXX: \C\<[^A-Z0-9]\k*\> rejects "Method", but matches "Μέθοδος".201  let [s:ff.Engine, s:ff.UpperCase, s:ff.LowerCase] = repeat([s:ff.RightConstant], 3)202endif203 204if exists("g:java_highlight_signature")205  let [s:ff.PeekTo, s:ff.PeekFrom, s:ff.GroupArgs] = repeat([s:ff.LeftConstant], 3)206else207  let [s:ff.PeekTo, s:ff.PeekFrom, s:ff.GroupArgs] = repeat([s:ff.RightConstant], 3)208endif209 210let s:with_html = !exists("g:java_ignore_html")211let s:with_markdown = !exists("g:java_ignore_markdown")212lockvar s:with_html s:with_markdown213 214" Note that the delimiting angle brackets are omitted.215let s:vv.type_param_list = '\%([^(){}]\|\n\)\+[[:space:]-]\@' . s:ff.Peek('1', '') . '<!'216" COMBAK: Revisit reference types once JDK-8259731 and JDK-8316779217" will have been resolved.218let s:vv.param_type_head = 'b\%%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\|\%%(\<\K\k*\>\.\)*%s\<' . s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\>'219" Allow for org.example.TopLevelType<T>.MemberType return types.220let s:vv.void_or_param_type = 'void\|\%(' . printf(s:vv.param_type_head, '\%(') . '\%(<' . s:vv.type_param_list . '>\.\=\)\=\)\+\)\%(\[\]\)*'221let s:vv.param_type_head = printf(s:vv.param_type_head, '')222 223" Java module declarations (JLS-17, §7.7).224"225" Note that a "module-info" file will be recognised with an arbitrary226" file extension (or no extension at all) so that more than one such227" declaration for the same Java module can be maintained for modular228" testing in a project without attendant confusion for IDEs, with the229" ".java\=" extension used for a production version and an arbitrary230" extension used for a testing version.231if fnamemodify(bufname("%"), ":t") =~ '^module-info\>\%(\.class\>\)\@!'232  syn keyword javaModuleStorageClass	module transitive233  syn keyword javaModuleStmt		open requires exports opens uses provides234  syn keyword javaModuleExternal	to with235  hi def link javaModuleStorageClass	StorageClass236  hi def link javaModuleStmt		Statement237  hi def link javaModuleExternal	Include238 239  if !exists("g:java_ignore_javadoc") && (s:with_html || s:with_markdown) && g:main_syntax != 'jsp'240    syn match javaDocProvidesTag	contained "@provides\_s\+\S\+" contains=javaDocParam241    syn match javaDocUsesTag		contained "@uses\_s\+\S\+" contains=javaDocParam242    hi def link javaDocProvidesTag	Special243    hi def link javaDocUsesTag		Special244  endif245endif246 247if exists("g:java_highlight_java_lang_ids")248  let g:java_highlight_all = 1249endif250 251if exists("g:java_highlight_all") || exists("g:java_highlight_java") || exists("g:java_highlight_java_lang")252  " java.lang.*253  "254  " The type names in ":syn-keyword"s (and in ":syn-match"es) of the255  " "java[CEIRX]_JavaLang" syntax groups are sub-grouped according to256  " the Java version of their introduction, and sub-group names are257  " arranged in alphabetical order, so that future newer names can be258  " pre-sorted and appended without disturbing their placement.259 260  syn keyword javaR_JavaLang ArithmeticException ArrayIndexOutOfBoundsException ArrayStoreException ClassCastException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException IndexOutOfBoundsException NegativeArraySizeException NullPointerException NumberFormatException RuntimeException SecurityException StringIndexOutOfBoundsException IllegalStateException UnsupportedOperationException EnumConstantNotPresentException TypeNotPresentException IllegalCallerException LayerInstantiationException WrongThreadException MatchException261  syn cluster javaClasses add=javaR_JavaLang262  hi def link javaR_JavaLang javaR_Java263  syn keyword javaC_JavaLang Boolean Character ClassLoader Compiler Double Float Integer Long Math Number Object Process Runtime SecurityManager String StringBuffer Thread ThreadGroup Byte Short Void Package RuntimePermission StrictMath StackTraceElement ProcessBuilder StringBuilder Module ModuleLayer StackWalker Record IO264  syn match   javaC_JavaLang "\<System\>"	" See javaDebug.265  " Generic non-interfaces:266  syn match   javaC_JavaLang "\<Class\>"267  syn match   javaC_JavaLang "\<InheritableThreadLocal\>"268  syn match   javaC_JavaLang "\<ThreadLocal\>"269  syn match   javaC_JavaLang "\<Enum\>"270  syn match   javaC_JavaLang "\<ClassValue\>"271  exec 'syn match javaC_JavaLang "\%(\<Enum\.\)\@' . s:ff.Peek('5', '') . '<=\<EnumDesc\>"'272  syn match   javaC_JavaLang "\<ScopedValue\>"273  " Member classes:274  exec 'syn match javaC_JavaLang "\%(\<Character\.\)\@' . s:ff.Peek('10', '') . '<=\<Subset\>"'275  exec 'syn match javaC_JavaLang "\%(\<Character\.\)\@' . s:ff.Peek('10', '') . '<=\<UnicodeBlock\>"'276  exec 'syn match javaC_JavaLang "\%(\<ProcessBuilder\.\)\@' . s:ff.Peek('15', '') . '<=\<Redirect\>"'277  exec 'syn match javaC_JavaLang "\%(\<ModuleLayer\.\)\@' . s:ff.Peek('12', '') . '<=\<Controller\>"'278  exec 'syn match javaC_JavaLang "\%(\<Runtime\.\)\@' . s:ff.Peek('8', '') . '<=\<Version\>"'279  exec 'syn match javaC_JavaLang "\%(\<System\.\)\@' . s:ff.Peek('7', '') . '<=\<LoggerFinder\>"'280  exec 'syn match javaC_JavaLang "\%(\<ScopedValue\.\)\@' . s:ff.Peek('12', '') . '<=\<Carrier\>"'281  " Member enumerations:282  exec 'syn match javaC_JavaLang "\%(\<Thread\.\)\@' . s:ff.Peek('7', '') . '<=\<State\>"'283  exec 'syn match javaC_JavaLang "\%(\<Character\.\)\@' . s:ff.Peek('10', '') . '<=\<UnicodeScript\>"'284  exec 'syn match javaC_JavaLang "\%(\<ProcessBuilder\.Redirect\.\)\@' . s:ff.Peek('24', '') . '<=\<Type\>"'285  exec 'syn match javaC_JavaLang "\%(\<StackWalker\.\)\@' . s:ff.Peek('12', '') . '<=\<Option\>"'286  exec 'syn match javaC_JavaLang "\%(\<System\.Logger\.\)\@' . s:ff.Peek('14', '') . '<=\<Level\>"'287  syn cluster javaClasses add=javaC_JavaLang288  hi def link javaC_JavaLang javaC_Java289  syn keyword javaE_JavaLang AbstractMethodError ClassCircularityError ClassFormatError Error IllegalAccessError IncompatibleClassChangeError InstantiationError InternalError LinkageError NoClassDefFoundError NoSuchFieldError NoSuchMethodError OutOfMemoryError StackOverflowError ThreadDeath UnknownError UnsatisfiedLinkError VerifyError VirtualMachineError ExceptionInInitializerError UnsupportedClassVersionError AssertionError BootstrapMethodError290  syn cluster javaClasses add=javaE_JavaLang291  hi def link javaE_JavaLang javaE_Java292  syn keyword javaX_JavaLang ClassNotFoundException CloneNotSupportedException Exception IllegalAccessException InstantiationException InterruptedException NoSuchMethodException Throwable NoSuchFieldException ReflectiveOperationException293  syn cluster javaClasses add=javaX_JavaLang294  hi def link javaX_JavaLang javaX_Java295  syn keyword javaI_JavaLang Cloneable Runnable CharSequence Appendable Deprecated Override Readable SuppressWarnings AutoCloseable SafeVarargs FunctionalInterface ProcessHandle296  " Generic non-classes:297  syn match   javaI_JavaLang "\<Comparable\>"298  syn match   javaI_JavaLang "\<Iterable\>"299  " Member interfaces:300  exec 'syn match javaI_JavaLang "\%(\<Thread\.\)\@' . s:ff.Peek('7', '') . '<=\<UncaughtExceptionHandler\>"'301  exec 'syn match javaI_JavaLang "\%(\<ProcessHandle\.\)\@' . s:ff.Peek('14', '') . '<=\<Info\>"'302  exec 'syn match javaI_JavaLang "\%(\<System\.\)\@' . s:ff.Peek('7', '') . '<=\<Logger\>"'303  exec 'syn match javaI_JavaLang "\%(\<StackWalker\.\)\@' . s:ff.Peek('12', '') . '<=\<StackFrame\>"'304  exec 'syn match javaI_JavaLang "\%(\<Thread\.\)\@' . s:ff.Peek('7', '') . '<=\<Builder\>"'305  exec 'syn match javaI_JavaLang "\%(\<Thread\.Builder\.\)\@' . s:ff.Peek('15', '') . '<=\<OfPlatform\>"'306  exec 'syn match javaI_JavaLang "\%(\<Thread\.Builder\.\)\@' . s:ff.Peek('15', '') . '<=\<OfVirtual\>"'307  exec 'syn match javaI_JavaLang "\%(\<ScopedValue\.\)\@' . s:ff.Peek('12', '') . '<=\<CallableOp\>"'308  syn cluster javaClasses add=javaI_JavaLang309  hi def link javaI_JavaLang javaI_Java310 311  " Common groups for generated "javaid.vim" syntax items:312  hi def link javaR_Java javaR_313  hi def link javaC_Java javaC_314  hi def link javaE_Java javaE_315  hi def link javaX_Java javaX_316  hi def link javaI_Java javaI_317  hi def link javaX_ javaExceptions318  hi def link javaR_ javaExceptions319  hi def link javaE_ javaExceptions320  hi def link javaC_ javaConstant321  hi def link javaI_ javaTypedef322 323  syn keyword javaLangObject getClass notify notifyAll wait324 325  " Lower the syntax priority of overridable java.lang.Object method326  " names for zero-width matching (define g:java_highlight_signature327  " and see their base declarations for java.lang.Object):328  syn match javaLangObject "\<clone\>"329  syn match javaLangObject "\<equals\>"330  syn match javaLangObject "\<finalize\>"331  syn match javaLangObject "\<hashCode\>"332  syn match javaLangObject "\<toString\>"333  hi def link javaLangObject javaConstant334 335  " As of JDK 25, RuntimePermission is deprecated for removal336  "	(JDK-8353641).337  "	(Note that SecurityException is still not deprecated.)338  " As of JDK 24, SecurityManager is rendered non-functional339  "	(JDK-8338625).340  " As of JDK 21, Compiler is no more (JDK-8205129).341  syn keyword javaLangDeprecated Compiler SecurityManager RuntimePermission342endif343 344runtime syntax/javaid.vim345 346" Type parameter sections (JLS-17, §4.4, §4.5).347"348" Note that false positives may elsewhere occur whenever an identifier349" is butted against a less-than operator.  Cf. (X<Y) and (X < Y).350if exists("g:java_highlight_generics")351  syn keyword javaWildcardBound contained extends super352  syn cluster javaTypeParams contains=javaAnnotation,javaWildcardBound,javaType,@javaClasses,javaComment,javaLineComment353 354  " Match sections of generic methods and constructors and their355  " parameterised use.356  exec 'syn region javaTypeParamSection transparent matchgroup=javaGenericsCX start=/' . s:ff.Engine('\%#=2', '') . '\%(^\|\s\)\@' . s:ff.Peek('1', '') . '<=<\%(' . s:vv.type_param_list . '>\_s\+\%(\%(' . s:vv.void_or_param_type . '\)\_s\+\)\=\<\K\k*\>\s*(\)\@=/ end=/>/ contains=javaGenerics,@javaTypeParams'357  exec 'syn region javaTypeParamSection transparent matchgroup=javaGenericsCX start=/\%(\%(\<new\|::\|\.\)[[:space:]\n]*\)\@' . s:ff.PeekFor('javaTypeParamSection', 80) . '<=<>\@!/ end=/>/ contains=javaGenerics,@javaTypeParams'358 359  for s:ctx in [{'gsg': 'javaGenerics', 'ghg': 'javaGenericsC1', 'csg': 'javaGenericsX', 'c': ''},360      \ {'gsg': 'javaGenericsX', 'ghg': 'javaGenericsC2', 'csg': 'javaGenerics', 'c': ' contained'}]361    " Match sections of generic types and their parameterised use.362    exec 'syn region ' . s:ctx.gsg . s:ctx.c . ' transparent matchgroup=' . s:ctx.ghg . ' start=/' . s:ff.Engine('\%#=2', '') . '\%(\<\K\k*\>\.\)*\<' . s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\><\%([[:space:]\n]*\%([?@]\|' . s:vv.param_type_head . '\)\)\@=/ end=/>/ contains=' . s:ctx.csg . ',@javaTypeParams'363  endfor364 365  unlet s:ctx366  hi def link javaWildcardBound	Question367  hi def link javaGenericsC1	Function368  hi def link javaGenericsC2	Type369  hi def link javaGenericsCX	javaGenericsC2370endif371 372if exists("g:java_space_errors")373  if !exists("g:java_no_trail_space_error")374    syn match javaSpaceError "\s\+$"375  endif376  if !exists("g:java_no_tab_space_error")377    syn match javaSpaceError " \+\t"me=e-1378  endif379  hi def link javaSpaceError Error380endif381 382exec 'syn match javaUserLabel "^\s*\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<!\s*::\@!"he=e-1'383 384if s:ff.IsAnyRequestedPreviewFeatureOf([455, 488, 507, 530])385  syn region  javaLabelRegion	transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaBoolean,javaNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaType,javaLabelDefault,javaLabelVarType,javaLabelWhenClause386else387  syn region  javaLabelRegion	transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaLabelCastType,javaLabelNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaLabelDefault,javaLabelVarType,javaLabelWhenClause388  syn keyword javaLabelCastType	contained char byte short int389  syn match   javaLabelNumber	contained "\<0\>[lL]\@!"390  syn match   javaLabelNumber	contained "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)\>[lL]\@!"391  hi def link javaLabelCastType	javaType392  hi def link javaLabelNumber	javaNumber393endif394 395syn region  javaLabelRegion	transparent matchgroup=javaLabel start="\<default\>\%(\s*\%(:\|->\)\)\@=" matchgroup=NONE end=":\|->" oneline396" Consider grouped _default_ _case_ labels, i.e.397" case null, default ->398" case null: default:399syn keyword javaLabelDefault	contained default400syn keyword javaLabelVarType	contained var401" Allow for the contingency of the enclosing region not being able to402" _keep_ its _end_, e.g. case ':':.403syn region  javaLabelWhenClause	contained transparent matchgroup=javaLabel start="\<when\>" matchgroup=NONE end=":"me=e-1 end="->"me=e-2 contains=TOP,javaImportDeclBlock,javaExternal,javaLambdaDef404 405" Comments406syn keyword javaTodo		contained TODO FIXME XXX407 408if exists("g:java_comment_strings")409  syn region  javaCommentString	contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell410  syn region  javaCommentString	contained start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell,javaSpecialError,javaTextBlockError411  syn region  javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell412  syn match   javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar413  syn match   javaCommentCharacter contained "'\\''" contains=javaSpecialChar414  syn match   javaCommentCharacter contained "'[^\\]'"415  syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber,javaStrTempl416  syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber,javaStrTempl417endif418 419exec 'syn region javaComment matchgroup=javaCommentStart start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,javaCommentError,javaSpaceError,@Spell ' . s:ff.QueryFoldArgForSyntaxItems('c')420syn match   javaCommentStar	contained "^\s*\*[^/]"me=e-1421syn match   javaCommentStar	contained "^\s*\*$"422syn match   javaLineComment	"//.*" contains=@javaCommentSpecial2,javaTodo,javaCommentMarkupTag,javaSpaceError,@Spell423syn match   javaCommentMarkupTag contained "@\%(end\|highlight\|link\|replace\|start\)\>" nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite424syn match   javaCommentMarkupTagAttr contained "\<region\>" nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite425exec 'syn region javaCommentMarkupTagAttr contained transparent matchgroup=javaHtmlArg start=/\<\%(re\%(gex\|gion\|placement\)\|substring\|t\%(arget\|ype\)\)\%(\s*=\)\@=/ matchgroup=javaHtmlString end=/\%(=\s*\)\@' . s:ff.PeekFor('javaCommentMarkupTagAttr', 80) . '<=\%("[^"]\+"\|' . "\x27[^\x27]\\+\x27" . '\|\%([.-]\|\k\)\+\)/ nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite oneline'426syn match   javaCommentError contained "/\*"me=e-1 display427 428if !exists("g:java_ignore_javadoc") && (s:with_html || s:with_markdown) && g:main_syntax != 'jsp'429  " The overridable "html*" and "markdown*" default links must be430  " defined _before_ the inclusion of the same default links from431  " "html.vim" and "markdown.vim".432  if s:with_html || s:with_markdown433    hi def link htmlComment		Special434    hi def link htmlCommentPart		Special435    hi def link htmlArg			Type436    hi def link htmlString		String437  endif438 439  if s:with_markdown440    hi def link markdownCode		Special441    hi def link markdownCodeBlock	Special442    hi def link markdownCodeDelimiter	Special443    hi def link markdownLinkDelimiter	Comment444  endif445 446  syntax case ignore447 448  " Note that javaDocSeeTag is valid in HTML and Markdown.449  let s:ff.WithMarkdown = s:ff.RightConstant450 451  " Include HTML syntax coloring for Javadoc comments.452  if s:with_html453    try454      if exists("g:html_syntax_folding") && !exists("g:java_consent_to_html_syntax_folding")455	let s:html_syntax_folding_copy = g:html_syntax_folding456	unlet g:html_syntax_folding457      endif458 459      syntax include @javaHtml syntax/html.vim460    finally461      unlet! b:current_syntax462 463      if exists("s:html_syntax_folding_copy")464	let g:html_syntax_folding = s:html_syntax_folding_copy465	unlet s:html_syntax_folding_copy466      endif467    endtry468  endif469 470  " Include Markdown syntax coloring (v7.2.437) for Javadoc comments.471  if s:with_markdown472    try473      if exists("g:html_syntax_folding") && !exists("g:java_consent_to_html_syntax_folding")474	let s:html_syntax_folding_copy = g:html_syntax_folding475	unlet g:html_syntax_folding476      endif477 478      if !empty(get(g:, 'markdown_fenced_languages', []))479	let s:markdown_fenced_languages_copy = g:markdown_fenced_languages480	unlet g:markdown_fenced_languages481      endif482 483      syntax include @javaMarkdown syntax/markdown.vim484 485      try486	syn clear markdownId markdownLineStart markdownH1 markdownH2 markdownHeadingRule markdownRule markdownCode markdownCodeBlock markdownIdDeclaration487	let s:ff.WithMarkdown = s:ff.LeftConstant488      catch /\<E28:/489	call s:ReportOnce(v:exception)490	let s:no_support = 1491	unlet! g:java_ignore_markdown492	let g:java_ignore_markdown = 28493      endtry494    catch /\<E48[45]:/495      call s:ReportOnce(v:exception)496      let s:no_support = 1497    finally498      unlet! b:current_syntax499 500      if exists("s:markdown_fenced_languages_copy")501	let g:markdown_fenced_languages = s:markdown_fenced_languages_copy502	unlet s:markdown_fenced_languages_copy503      endif504 505      if exists("s:html_syntax_folding_copy")506	let g:html_syntax_folding = s:html_syntax_folding_copy507	unlet s:html_syntax_folding_copy508      endif509 510      if exists("s:no_support")511	unlet s:no_support512	unlockvar s:with_markdown513	let s:with_markdown = 0514	lockvar s:with_markdown515	hi clear markdownCode516	hi clear markdownCodeBlock517	hi clear markdownCodeDelimiter518	hi clear markdownLinkDelimiter519      endif520    endtry521  endif522 523  " HTML enables spell checking for all text that is not in a syntax524  " item (:syntax spell toplevel); instead, limit spell checking to525  " items matchable with syntax groups containing the @Spell cluster.526  try527    syntax spell default528  catch /\<E390:/529    call s:ReportOnce(v:exception)530  endtry531 532  if s:with_markdown533    exec 'syn region javaMarkdownComment start="///" skip="^\s*///.*$" end="^" keepend contains=javaMarkdownCommentTitle,javaMarkdownShortcutLink,@javaMarkdown,@javaDocTags,javaTodo,@Spell nextgroup=javaMarkdownCommentTitle ' . s:ff.QueryFoldArgForSyntaxItems('d')534    syn match javaMarkdownCommentMask	contained "^\s*///"535    exec 'syn region javaMarkdownCommentTitle contained matchgroup=javaMarkdownComment start="\%(///.*\r\=\n\s*\)\@' . s:ff.PeekFor('javaMarkdownCommentTitle', 120) . '<!///" matchgroup=javaMarkdownCommentTitle end="\.$" end="\.[ \t\r]\@=" end="\n\%(\s*///\s*$\)\@=" end="\%(^\s*///\s*\)\@' . s:ff.PeekFor('javaMarkdownCommentTitle', 120) . '<=@"me=s-2,he=s-1 contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags'536    exec 'syn region javaMarkdownCommentTitle contained matchgroup=javaMarkdownComment start="\%(///.*\r\=\n\s*\)\@' . s:ff.PeekFor('javaMarkdownCommentTitle', 120) . '<!///\s*\%({@return\>\)\@=" matchgroup=javaMarkdownCommentTitle end="}\%(\s*\.*\)*" contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags,javaTitleSkipBlock'537    exec 'syn region javaMarkdownCommentTitle contained matchgroup=javaMarkdownComment start="\%(///.*\r\=\n\s*\)\@' . s:ff.PeekFor('javaMarkdownCommentTitle', 120) . '<!///\s*\%({@summary\>\)\@=" matchgroup=javaMarkdownCommentTitle end="}" contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags,javaTitleSkipBlock'538 539    " REDEFINE THE MARKDOWN ITEMS ANCHORED WITH "^", OBSERVING THE540    " DEFINITION ORDER.541    syn match markdownLineStart		contained "^\s*///\s*[<@]\@!" contains=@markdownBlock,javaMarkdownCommentTitle,javaMarkdownCommentMask nextgroup=@markdownBlock,htmlSpecialChar542    " See https://spec.commonmark.org/0.31.2/#setext-headings.543    syn match markdownH1		contained "^\s*/// \{,3}.\+\r\=\n\s*/// \{,3}=\+\s*$" contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink,javaMarkdownCommentMask544    syn match markdownH2		contained "^\s*/// \{,3}.\+\r\=\n\s*/// \{,3}-\+\s*$" contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink,javaMarkdownCommentMask545    " See https://spec.commonmark.org/0.31.2/#atx-headings.546    syn region markdownH1		contained matchgroup=markdownH1Delimiter start=" \{,3}#\s" end="#*\s*$" keepend contains=@markdownInline,markdownAutomaticLink oneline547    syn region markdownH2		contained matchgroup=markdownH2Delimiter start=" \{,3}##\s" end="#*\s*$" keepend contains=@markdownInline,markdownAutomaticLink oneline548    syn match markdownHeadingRule	contained "^\s*/// \{,3}[=-]\+\s*$" contains=javaMarkdownCommentMask549    " See https://spec.commonmark.org/0.31.2/#thematic-breaks.550    syn match markdownRule		contained "^\s*/// \{,3}\*\s*\*\%(\s*\*\)\+\s*$" contains=javaMarkdownCommentMask551    syn match markdownRule		contained "^\s*/// \{,3}_\s*_\%(\s*_\)\+\s*$" contains=javaMarkdownCommentMask552    syn match markdownRule		contained "^\s*/// \{,3}-\s*-\%(\s*-\)\+\s*$" contains=javaMarkdownCommentMask553    " See https://spec.commonmark.org/0.31.2/#indented-code-blocks.554    syn region markdownCodeBlock	contained start="^\s*///\%( \{4,}\|\t\)" end="^\ze\s*///\%(\s*$\| \{,3}\S\)" keepend contains=javaMarkdownCommentMask555    " See https://spec.commonmark.org/0.31.2/#code-spans.556    syn region markdownCode		contained matchgroup=markdownCodeDelimiter start="\z(`\+\) \=" end=" \=\z1" keepend contains=markdownLineStart,javaMarkdownCommentMask557    " See https://spec.commonmark.org/0.31.2/#fenced-code-blocks.558    syn region markdownCodeBlock	contained start="^\s*/// \{,3}\z(```\+\)\%(.\{-}[^`]`\)\@!" end="^\s*/// \{,3}\z1`*" keepend contains=javaMarkdownCommentMask559    syn region markdownCodeBlock	contained start="^\s*/// \{,3}\z(\~\~\~\+\)" end="^\s*/// \{,3}\z1\~*" keepend contains=javaMarkdownCommentMask560    " See https://spec.commonmark.org/0.31.2/#link-reference-definitions.561    syn region markdownIdDeclaration	contained matchgroup=markdownLinkDelimiter start="^\s*/// \{,3\}!\=\[" end="\]:" keepend contains=javaMarkdownCommentMask nextgroup=markdownUrl oneline skipwhite562    " See https://spec.commonmark.org/0.31.2/#link-label.563    syn region markdownId		contained matchgroup=markdownIdDelimiter start="\[\%([\t ]\]\)\@!" end="\]" contains=javaMarkdownSkipBrackets,javaMarkdownCommentMask564    " Note that escaped brackets can be unbalanced.565    syn match javaMarkdownSkipBrackets	contained transparent "\\\[\|\\\]"566    " See https://spec.commonmark.org/0.31.2/#shortcut-reference-link.567    syn region javaMarkdownShortcutLink	contained matchgroup=markdownLinkTextDelimiter start="!\=\[^\@!\%(\_[^][]*\%(\[\_[^][]*\]\_[^][]*\)*]\%([[(]\)\@!\)\@=" end="\]\%([[(]\)\@!" contains=@markdownInline,markdownLineStart,javaMarkdownSkipBrackets,javaMarkdownCommentMask nextgroup=markdownLink,markdownId skipwhite568 569    for s:name in ['markdownFootnoteDefinition', 'markdownFootnote']570      if hlexists(s:name)571	exec 'syn clear ' . s:name572      endif573    endfor574 575    unlet s:name576 577    " COMBAK: Footnotes are recognised by "markdown.vim", but are not578    " in CommonMark.  See https://pandoc.org/MANUAL.html#footnotes.579""""syn match markdownFootnoteDefinition contained "^\s*///\s*\[^[^\]]\+\]:" contains=javaMarkdownCommentMask580 581    hi def link javaMarkdownComment	Comment582    hi def link javaMarkdownCommentMask	javaMarkdownComment583    hi def link javaMarkdownCommentTitle SpecialComment584    hi def link javaMarkdownShortcutLink htmlLink585  endif586 587  if s:with_html588    exec 'syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,@javaDocTags,javaTodo,javaCommentError,javaSpaceError,@Spell ' . s:ff.QueryFoldArgForSyntaxItems('d')589    exec 'syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*" matchgroup=javaCommentTitle end="\.$" end="\.[ \t\r]\@=" end="\%(^\s*\**\s*\)\@' . s:ff.PeekFor('javaCommentTitle', 120) . '<=@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags'590    syn region javaCommentTitle	contained matchgroup=javaDocComment start="/\*\*\s*\r\=\n\=\s*\**\s*\%({@return\>\)\@=" matchgroup=javaCommentTitle end="}\%(\s*\.*\)*" contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags,javaTitleSkipBlock591    syn region javaCommentTitle	contained matchgroup=javaDocComment start="/\*\*\s*\r\=\n\=\s*\**\s*\%({@summary\>\)\@=" matchgroup=javaCommentTitle end="}" contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags,javaTitleSkipBlock592    hi def link javaDocComment		Comment593    hi def link javaCommentTitle	SpecialComment594  endif595 596  " The members of javaDocTags are sub-grouped according to the Java597  " version of their introduction, and sub-group members in turn are598  " arranged in alphabetical order, so that future newer members can599  " be pre-sorted and appended without disturbing the current member600  " placement.601  " Since they only have significance in javaCommentTitle, neither602  " javaDocSummaryTag nor javaDocReturnTitleTag are defined.603  syn cluster javaDocTags	contains=javaDocAuthorTag,javaDocDeprecatedTag,javaDocExceptionTag,javaDocParamTag,javaDocReturnTag,javaDocSeeTag,javaDocVersionTag,javaDocSinceTag,javaDocLinkTag,javaDocSerialTag,javaDocSerialDataTag,javaDocSerialFieldTag,javaDocThrowsTag,javaDocDocRootTag,javaDocInheritDocTag,javaDocLinkplainTag,javaDocValueTag,javaDocCodeTag,javaDocLiteralTag,javaDocHiddenTag,javaDocIndexTag,javaDocProvidesTag,javaDocUsesTag,javaDocSystemPropertyTag,javaDocSnippetTag,javaDocSpecTag604 605  " Anticipate non-standard inline tags in {@return} and {@summary}.606  syn region javaTitleSkipBlock	contained transparent start="{\%(@\%(return\|summary\)\>\)\@!" end="}"607  syn match  javaDocDocRootTag	contained "{@docRoot}"608  syn match  javaDocInheritDocTag contained "{@inheritDoc}"609  syn region javaIndexSkipBlock	contained transparent start="{\%(@index\>\)\@!" end="}" contains=javaIndexSkipBlock,javaDocIndexTag610  syn region javaDocIndexTag	contained start="{@index\>" end="}" contains=javaDocIndexTag,javaIndexSkipBlock611  syn region javaLinkSkipBlock	contained transparent start="{\%(@link\>\)\@!" end="}" contains=javaLinkSkipBlock,javaDocLinkTag612  syn region javaDocLinkTag	contained start="{@link\>" end="}" contains=javaDocLinkTag,javaLinkSkipBlock613  syn region javaLinkplainSkipBlock contained transparent start="{\%(@linkplain\>\)\@!" end="}" contains=javaLinkplainSkipBlock,javaDocLinkplainTag614  syn region javaDocLinkplainTag contained start="{@linkplain\>" end="}" contains=javaDocLinkplainTag,javaLinkplainSkipBlock615  syn region javaLiteralSkipBlock contained transparent start="{\%(@literal\>\)\@!" end="}" contains=javaLiteralSkipBlock,javaDocLiteralTag616  syn region javaDocLiteralTag	contained start="{@literal\>" end="}" contains=javaDocLiteralTag,javaLiteralSkipBlock617  syn region javaSystemPropertySkipBlock contained transparent start="{\%(@systemProperty\>\)\@!" end="}" contains=javaSystemPropertySkipBlock,javaDocSystemPropertyTag618  syn region javaDocSystemPropertyTag contained start="{@systemProperty\>" end="}" contains=javaDocSystemPropertyTag,javaSystemPropertySkipBlock619  syn region javaValueSkipBlock	contained transparent start="{\%(@value\>\)\@!" end="}" contains=javaValueSkipBlock,javaDocValueTag620  syn region javaDocValueTag	contained start="{@value\>" end="}" contains=javaDocValueTag,javaValueSkipBlock621 622  syn match  javaDocParam	contained "\s\zs\S\+"623  syn match  javaDocExceptionTag contained "@exception\s\+\S\+" contains=javaDocParam624  syn match  javaDocParamTag	contained "@param\s\+\S\+" contains=javaDocParam625  syn match  javaDocSinceTag	contained "@since\s\+\S\+" contains=javaDocParam626  syn match  javaDocThrowsTag	contained "@throws\s\+\S\+" contains=javaDocParam627  syn match  javaDocSpecTag	contained "@spec\_s\+\S\+\ze\_s\+\S\+" contains=javaDocParam628 629  syn match  javaDocAuthorTag	contained "@author\>"630  syn match  javaDocDeprecatedTag contained "@deprecated\>"631  syn match  javaDocHiddenTag	contained "@hidden\>"632  syn match  javaDocReturnTag	contained "@return\>"633  syn match  javaDocSerialTag	contained "@serial\>"634  syn match  javaDocSerialDataTag contained "@serialData\>"635  syn match  javaDocSerialFieldTag contained "@serialField\>"636  syn match  javaDocVersionTag	contained "@version\>"637 638  syn match javaDocSeeTag contained "@see\>\s*" nextgroup=javaDocSeeTag1,javaDocSeeTag2,javaDocSeeTag3,javaDocSeeTag4,javaDocSeeTagStar,javaDocSeeTagSlash skipwhite skipempty639 640  if s:with_html641    syn match  javaDocSeeTagStar contained "^\s*\*\+\%(\s*{\=@\|/\|$\)\@!" nextgroup=javaDocSeeTag1,javaDocSeeTag2,javaDocSeeTag3,javaDocSeeTag4 skipwhite skipempty642    hi def link javaDocSeeTagStar javaDocComment643  endif644 645  if s:with_markdown646    syn match  javaDocSeeTagSlash contained "^\s*///\%(\s*{\=@\|$\)\@!" nextgroup=javaDocSeeTag1,javaDocSeeTag2,javaDocSeeTag3,javaDocSeeTag4 skipwhite skipempty647    hi def link javaDocSeeTagSlash javaMarkdownComment648  endif649 650  syn match  javaDocSeeTag1	contained @"\_[^"]\+"@651  syn match  javaDocSeeTag2	contained @<a\s\+\_.\{-}</a>@ contains=@javaHtml extend652  exec 'syn match javaDocSeeTag3 contained @[' . s:ff.WithMarkdown('[', '') . '"< \t]\@!\%(\k\|[/.]\)*\%(##\=\k\+\%((\_[^)]*)\)\=\)\=@ nextgroup=javaDocSeeTag3Label skipwhite skipempty'653  syn match  javaDocSeeTag3Label contained @\k\%(\k\+\s*\)*$@654 655  " COMBAK: No support for type javaDocSeeTag2 in Markdown.656""if s:with_markdown657""  syn match  javaDocSeeTag4	contained @\[.\+\]\s\=\%(\[.\+\]\|(.\+)\)@ contains=@javaMarkdown extend658""  hi def link javaDocSeeTag4	Special659""endif660 661  syn region javaCodeSkipBlock	contained transparent start="{\%(@code\>\)\@!" end="}" contains=javaCodeSkipBlock,javaDocCodeTag662  syn region javaDocCodeTag	contained start="{@code\>" end="}" contains=javaDocCodeTag,javaCodeSkipBlock663 664  exec 'syn region javaDocSnippetTagAttr contained transparent matchgroup=javaHtmlArg start=/\<\%(class\|file\|id\|lang\|region\)\%(\s*=\)\@=/ matchgroup=javaHtmlString end=/:$/ end=/\%(=\s*\)\@' . s:ff.PeekFor('javaDocSnippetTagAttr', 80) . '<=\%("[^"]\+"\|' . "\x27[^\x27]\\+\x27" . '\|\%([.\\/-]\|\k\)\+\)/ nextgroup=javaDocSnippetTagAttr skipwhite skipnl'665  syn region javaSnippetSkipBlock contained transparent start="{\%(@snippet\>\)\@!" end="}" contains=javaSnippetSkipBlock,javaDocSnippetTag,javaCommentMarkupTag666  syn region javaDocSnippetTag	contained start="{@snippet\>" end="}" contains=javaDocSnippetTag,javaSnippetSkipBlock,javaDocSnippetTagAttr,javaCommentMarkupTag667 668  syntax case match669  hi def link javaDocParam		Function670 671  hi def link javaDocAuthorTag		Special672  hi def link javaDocCodeTag		Special673  hi def link javaDocDeprecatedTag	Special674  hi def link javaDocDocRootTag		Special675  hi def link javaDocExceptionTag	Special676  hi def link javaDocHiddenTag		Special677  hi def link javaDocIndexTag		Special678  hi def link javaDocInheritDocTag	Special679  hi def link javaDocLinkTag		Special680  hi def link javaDocLinkplainTag	Special681  hi def link javaDocLiteralTag		Special682  hi def link javaDocParamTag		Special683  hi def link javaDocReturnTag		Special684  hi def link javaDocSeeTag		Special685  hi def link javaDocSeeTag1		String686  hi def link javaDocSeeTag2		Special687  hi def link javaDocSeeTag3		Function688  hi def link javaDocSerialTag		Special689  hi def link javaDocSerialDataTag	Special690  hi def link javaDocSerialFieldTag	Special691  hi def link javaDocSinceTag		Special692  hi def link javaDocSnippetTag		Special693  hi def link javaDocSpecTag		Special694  hi def link javaDocSystemPropertyTag	Special695  hi def link javaDocThrowsTag		Special696  hi def link javaDocValueTag		Special697  hi def link javaDocVersionTag		Special698endif699 700" match the special comment /**/701syn match   javaComment		"/\*\*/"702 703" Strings and constants704syn match   javaSpecialError	contained "\\."705syn match   javaSpecialCharError contained "[^']"706" Escape Sequences (JLS-17, §3.10.7):707syn match   javaSpecialChar	contained "\\\%(u\x\x\x\x\|[0-3]\o\o\|\o\o\=\|[bstnfr"'\\]\)"708syn region  javaString		start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell709syn region  javaString		start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell710syn match   javaTextBlockError	+"""\s*"""+711 712if s:ff.IsAnyRequestedPreviewFeatureOf([430])713  syn region javaStrTemplEmbExp	contained matchgroup=javaStrTempl start="\\{" end="}" contains=TOP,javaImportDeclBlock714  exec 'syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@' . s:ff.PeekFor('javaStrTempl', 80) . '<="+ end=+"+ contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,@Spell'715  exec 'syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@' . s:ff.PeekFor('javaStrTempl', 80) . '<="""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell'716  hi def link javaStrTempl	Macro717endif718 719syn match   javaCharacter	"'[^']*'" contains=javaSpecialChar,javaSpecialCharError720syn match   javaCharacter	"'\\''" contains=javaSpecialChar721syn match   javaCharacter	"'[^\\]'"722" Integer literals (JLS-17, §3.10.1):723syn keyword javaNumber		0 0l 0L724syn match   javaNumber		"\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)[lL]\=\>"725" Decimal floating-point literals (JLS-17, §3.10.2):726" Against "\<\d\+\>\.":727syn match   javaNumber		"\<\d\%(_*\d\)*\."728syn match   javaNumber		"\%(\<\d\%(_*\d\)*\.\%(\d\%(_*\d\)*\)\=\|\.\d\%(_*\d\)*\)\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\=\>"729syn match   javaNumber		"\<\d\%(_*\d\)*[eE][-+]\=\d\%(_*\d\)*[fFdD]\=\>"730syn match   javaNumber		"\<\d\%(_*\d\)*\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\>"731" Hexadecimal floating-point literals (JLS-17, §3.10.2):732syn match   javaNumber		"\<0[xX]\%(\x\%(_*\x\)*\.\=\|\%(\x\%(_*\x\)*\)\=\.\x\%(_*\x\)*\)[pP][-+]\=\d\%(_*\d\)*[fFdD]\=\>"733 734" Unicode characters735syn match   javaSpecial "\\u\x\x\x\x"736 737" Method declarations (JLS-17, §8.4.3, §8.4.4, §9.4).738if exists("g:java_highlight_functions")739  syn cluster javaFuncParams contains=javaAnnotation,@javaClasses,javaGenerics,javaType,javaVarArg,javaComment,javaLineComment740 741  if exists("g:java_highlight_signature")742    syn cluster javaFuncParams add=javaParamModifier743    hi def link javaFuncDefStart javaFuncDef744  else745    syn cluster javaFuncParams add=javaScopeDecl,javaConceptKind,javaStorageClass,javaExternal,javaTypeParamSection746  endif747 748  if g:java_highlight_functions =~# '^indent[1-8]\=$'749    let s:last = g:java_highlight_functions[-1 :]750    let s:indent = s:last != 't' ? repeat("\x20", s:last) : "\t"751    " Try to not match other type members, initialiser blocks, enum752    " constants (JLS-17, §8.9.1), and constructors (JLS-17, §8.1.7):753    " at any _conventional_ indentation, skip over all fields with754    " "[^=]*", all records with "\<record\s", and let the "*Skip*"755    " definitions take care of constructor declarations and enum756    " constants (with no support for @Foo(value = "bar")).  Also,757    " reject inlined declarations with "[^{;]" for signature.758    exec 'syn region javaFuncDef ' . s:ff.GroupArgs('transparent matchgroup=javaFuncDefStart', '') . ' start="' . s:ff.PeekTo('\%(', '') . '^' . s:indent . '\%(<\%(/\*.\{-}\*/\|[^(){}>]\|\n\)\+>\+\s\+\|\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)\+\)\=\%(\<\K\k*\>\.\)*\K\k*\>[^={;]*\%(\<record\)\@' . s:ff.Peek('6', '') . '<!\s' . s:ff.PeekFrom('\)\@' . s:ff.PeekFor('javaFuncDef', 120) . '<=', '') . '\K\k*\s*(" end=")" contains=@javaFuncParams'759    " As long as package-private constructors cannot be matched with760    " javaFuncDef, do not look with javaConstructorSkipDeclarator for761    " them.  (Approximate "javaTypeParamSection" if necessary.)762    exec 'syn match javaConstructorSkipDeclarator transparent "^' . s:indent . '\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*p\%(ublic\|rotected\|rivate\)\s\+\%(<\%(/\*.\{-}\*/\|[^(){}>]\|\n\)\+>\+\s\+\)\=\K\k*\s*(\@=" contains=javaAnnotation,javaScopeDecl,javaTypeParamSection,javaClassDecl,javaTypedef,javaType,@javaClasses,javaGenerics,javaComment,javaLineComment'763    " With a zero-width span for signature applicable on demand to764    " javaFuncDef, make related adjustments:765    " (1) Claim all enum constants of a line as a unit.766    exec 'syn match javaEnumSkipConstant contained transparent /^' . s:indent . '\%(\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\K\k*\s*\%((.*)\)\=\s*[,;({]\s*\)\+/ contains=@javaEnumConstants'767    " (2) Define javaTopEnum{Block,Declaration} for top level enums768    " and tell apart their constants from method declarations.769    syn region javaTopEnumBlock contained transparent matchgroup=javaTopEnumBlockStart start="{" end="}" contains=@javaTop,javaEnumSkipConstant770    exec 'syn match javaTopEnumDeclaration transparent /\%(^\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(strictfp\s\+\)\=\<enum\_s\+\)\@' . s:ff.PeekFor('javaTopEnumDeclaration', 80) . '<=\K\k*\%(\_s\+implements\_s.\+\)\=\_s*{\@=/ nextgroup=javaTopEnumBlock skipwhite skipempty'771    " (3) Define a base variant of javaParenT without using @javaTop772    " in order to not include javaFuncDef.773    syn region javaParenE transparent matchgroup=javaParen start="(" end=")" contains=@javaEnumConstants,javaInParen774    syn region javaParenE transparent matchgroup=javaParen start="\[" end="\]" contains=@javaEnumConstants775    syn cluster javaEnumConstants contains=TOP,javaTopEnumDeclaration,javaImportDeclBlock,javaFuncDef,javaParenT776    unlet s:indent s:last777  else778    " This is the "style" variant (:help ft-java-syntax).779 780    " Match arbitrarily indented camelCasedName method declarations.781    " Match: [@ɐ] [abstract] [<α, β>] Τʬ[<γ>][[][]] μʭʭ(/* ... */);782    exec 'syn region javaFuncDef ' . s:ff.GroupArgs('transparent matchgroup=javaFuncDefStart', '') . ' start=/' . s:ff.Engine('\%#=2', '') . s:ff.PeekTo('\%(', '') . '^\s\+\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(\%(abstract\|default\)\s\+\|\%(\%(final\|\%(native\|strictfp\)\|s\%(tatic\|ynchronized\)\)\s\+\)*\)\=\%(<' . s:vv.type_param_list . '>\s\+\)\=\%(' . s:vv.void_or_param_type . '\)\s\+' . s:ff.PeekFrom('\)\@' . s:ff.PeekFor('javaFuncDef', 120) . '<=', '') . '\<' . s:ff.LowerCase('[$_[:lower:]]', '[^A-Z0-9]') . '\k*\>\s*(/ end=/)/ skip=/\/\*.\{-}\*\/\|\/\/.*$/ contains=@javaFuncParams'783  endif784endif785 786if exists("g:java_highlight_debug")787  " Strings and constants788  syn match   javaDebugSpecial		contained "\\\%(u\x\x\x\x\|[0-3]\o\o\|\o\o\=\|[bstnfr"'\\]\)"789  syn region  javaDebugString		contained start=+"+ end=+"+ contains=javaDebugSpecial790  syn region  javaDebugString		contained start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaDebugSpecial,javaDebugTextBlockError791 792  if s:ff.IsAnyRequestedPreviewFeatureOf([430])793    " The highlight groups of java{StrTempl,Debug{,Paren,StrTempl}}\,794    " share one colour by default. Do not conflate unrelated parens.795    syn region javaDebugStrTemplEmbExp	contained matchgroup=javaDebugStrTempl start="\\{" end="}" contains=javaComment,javaLineComment,javaDebug\%(Paren\)\@!.*796    exec 'syn region javaDebugStrTempl contained start=+\%(\.[[:space:]\n]*\)\@' . s:ff.PeekFor('javaDebugStrTempl', 80) . '<="+ end=+"+ contains=javaDebugStrTemplEmbExp,javaDebugSpecial'797    exec 'syn region javaDebugStrTempl contained start=+\%(\.[[:space:]\n]*\)\@' . s:ff.PeekFor('javaDebugStrTempl', 80) . '<="""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaDebugStrTemplEmbExp,javaDebugSpecial,javaDebugTextBlockError'798    hi def link javaDebugStrTempl	Macro799  endif800 801  syn match   javaDebugTextBlockError	contained +"""\s*"""+802  syn match   javaDebugCharacter	contained "'[^\\]'"803  syn match   javaDebugSpecialCharacter contained "'\\.'"804  syn match   javaDebugSpecialCharacter contained "'\\''"805  syn keyword javaDebugNumber		contained 0 0l 0L806  syn match   javaDebugNumber		contained "\<\d\%(_*\d\)*\."807  syn match   javaDebugNumber		contained "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)[lL]\=\>"808  syn match   javaDebugNumber		contained "\%(\<\d\%(_*\d\)*\.\%(\d\%(_*\d\)*\)\=\|\.\d\%(_*\d\)*\)\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\=\>"809  syn match   javaDebugNumber		contained "\<\d\%(_*\d\)*[eE][-+]\=\d\%(_*\d\)*[fFdD]\=\>"810  syn match   javaDebugNumber		contained "\<\d\%(_*\d\)*\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\>"811  syn match   javaDebugNumber		contained "\<0[xX]\%(\x\%(_*\x\)*\.\=\|\%(\x\%(_*\x\)*\)\=\.\x\%(_*\x\)*\)[pP][-+]\=\d\%(_*\d\)*[fFdD]\=\>"812  syn keyword javaDebugBoolean		contained true false813  syn keyword javaDebugType		contained null this super814  syn region  javaDebugParen		contained start=+(+ end=+)+ contains=javaDebug.*,javaDebugParen815 816  " To make this work, define the highlighting for these groups.817  syn match javaDebug "\<System\.\%(out\|err\)\.print\%(ln\)\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen818" FIXME: What API does "p" belong to?819" syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen820  syn match javaDebug "\<\K\k*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen821" FIXME: What API do "trace*" belong to?822" syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen823 824  hi def link javaDebug			Debug825  hi def link javaDebugString		DebugString826  hi def link javaDebugTextBlockError	Error827  hi def link javaDebugType		DebugType828  hi def link javaDebugBoolean		DebugBoolean829  hi def link javaDebugNumber		Debug830  hi def link javaDebugSpecial		DebugSpecial831  hi def link javaDebugSpecialCharacter	DebugSpecial832  hi def link javaDebugCharacter	DebugString833  hi def link javaDebugParen		Debug834 835  hi def link DebugString		String836  hi def link DebugSpecial		Special837  hi def link DebugBoolean		Boolean838  hi def link DebugType			Type839endif840 841" Complement javaBlock and javaInParen for highlighting.842syn region javaBlockOther transparent matchgroup=javaBlockOtherStart start="{" end="}"843 844" Try not to fold top-level-type bodies under assumption that there is845" but one such body.846exec 'syn region javaBlock transparent matchgroup=javaBlockStart start="\%(^\|^\S[^:]\+\)\@' . s:ff.PeekFor('javaBlock', 120) . '<!{" end="}" ' . s:ff.QueryFoldArgForSyntaxItems('b')847 848" See "D.2.1 Anonymous Classes" at849" https://web.archive.org/web/20010821025330/java.sun.com/docs/books/jls/first_edition/html/1.1Update.html#12959.850if exists("g:java_mark_braces_in_parens_as_errors")851  syn match javaInParen contained "[{}]"852  hi def link javaInParen javaError853endif854 855" catch errors caused by wrong parenthesis856syn region  javaParenT	transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaInParen,javaParenT1857syn region  javaParenT1 contained transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaInParen,javaParenT2858syn region  javaParenT2 contained transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaInParen,javaParenT859syn match   javaParenError ")"860" catch errors caused by wrong square parenthesis861syn region  javaParenT	transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1862syn region  javaParenT1 contained transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2863syn region  javaParenT2 contained transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT864syn match   javaParenError "\]"865 866" Lambda expressions (JLS-17, §15.27) and method reference expressions867" (JLS-17, §15.13).868if exists("g:java_highlight_functions")869  syn match javaMethodRef ":::\@!"870 871  if exists("g:java_highlight_signature")872    let s:ff.LambdaDef = s:ff.LeftConstant873  else874    let s:ff.LambdaDef = s:ff.RightConstant875  endif876 877  " Make ()-matching definitions after the parenthesis error catcher.878  "879  " Note that here and elsewhere a single-line token is used for \z,880  " with other tokens repeated as necessary, to overcome the lack of881  " support for multi-line matching with \z.882  "883  " Match: ([@A [@B ...] final] var a[, var b, ...]) ->884  "	| ([@A [@B ...] final] T[<α>][[][]] a[, T b, ...]) ->885  " Expressions interspersed with comments are not recognised.886  exec 'syn ' . s:ff.LambdaDef('region javaLambdaDef transparent matchgroup=javaLambdaDefStart start=/', 'match javaLambdaDef "') . '\k\@' . s:ff.Peek('4', '') . '<!(' . s:ff.LambdaDef('\%(', '') . '[[:space:]\n]*\%(\%(@\%(\K\k*\.\)*\K\k*\>\%((\_.\{-1,})\)\{-,1}[[:space:]\n]\+\)*\%(final[[:space:]\n]\+\)\=\%(\<\K\k*\>\.\)*\<\K\k*\>\%(<\%([^(){}]\|\n\)\+[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\)\=\%(\%(\%(\[\]\)\+\|\.\.\.\)\)\=[[:space:]\n]\+\<\K\k*\>\%(\[\]\)*\%(,[[:space:]\n]*\)\=\)\+)[[:space:]\n]*' . s:ff.LambdaDef('\z(->\)\)\@=/ end=/)[[:space:]\n]*\z1/', '->"') . ' contains=javaAnnotation,javaParamModifier,javaLambdaVarType,javaType,@javaClasses,javaGenerics,javaVarArg'887  " Match: () ->888  "	| (a[, b, ...]) ->889  exec 'syn ' . s:ff.LambdaDef('region javaLambdaDef transparent matchgroup=javaLambdaDefStart start=/', 'match javaLambdaDef "') . '\k\@' . s:ff.Peek('4', '') . '<!(' . s:ff.LambdaDef('\%(', '') . '[[:space:]\n]*\%(\<\K\k*\>\%(,[[:space:]\n]*\)\=\)*)[[:space:]\n]*' . s:ff.LambdaDef('\z(->\)\)\@=/ end=/)[[:space:]\n]*\z1/', '->"')890  " Match: a ->891  exec 'syn ' . s:ff.LambdaDef('region javaLambdaDef transparent start=/', 'match javaLambdaDef "') . '\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<!' . s:ff.LambdaDef('\%([[:space:]\n]*\z(->\)\)\@=/ matchgroup=javaLambdaDefStart end=/\z1/', '[[:space:]\n]*->"')892 893  syn keyword javaParamModifier contained final894  syn keyword javaLambdaVarType contained var895  hi def link javaParamModifier		javaConceptKind896  hi def link javaLambdaVarType		javaOperator897  hi def link javaLambdaDef		javaFuncDef898  hi def link javaLambdaDefStart	javaFuncDef899  hi def link javaMethodRef		javaFuncDef900  hi def link javaFuncDef		Function901endif902 903" The @javaTop cluster comprises non-contained Java syntax groups.904" Note that the syntax file "aidl.vim" relies on its availability.905syn cluster javaTop contains=TOP,javaTopEnumDeclaration906 907if !exists("g:java_minlines")908  let g:java_minlines = 10909endif910 911" Note that variations of a /*/ balanced comment, e.g., /*/*/, /*//*/,912" /* /*/, /*  /*/, etc., may have their rightmost /*/ part accepted913" as a comment start by ':syntax sync ccomment'; consider alternatives914" to make synchronisation start further towards file's beginning by915" bumping up g:java_minlines or issuing ':syntax sync fromstart' or916" preferring &foldmethod set to 'syntax'.917exec "syn sync ccomment javaComment minlines=" . g:java_minlines918 919" The default highlighting.920hi def link javaVarArg			Function921hi def link javaBranch			Conditional922hi def link javaConditional		Conditional923hi def link javaRepeat			Repeat924hi def link javaExceptions		Exception925hi def link javaAssert			Statement926hi def link javaStorageClass		StorageClass927hi def link javaMethodDecl		javaStorageClass928hi def link javaClassDecl		javaStorageClass929hi def link javaScopeDecl		javaStorageClass930hi def link javaConceptKind		javaStorageClass931 932hi def link javaBoolean			Boolean933hi def link javaSpecial			Special934hi def link javaSpecialError		Error935hi def link javaSpecialCharError	Error936hi def link javaString			String937hi def link javaCharacter		Character938hi def link javaSpecialChar		SpecialChar939hi def link javaNumber			Number940hi def link javaError			Error941hi def link javaError2			javaError942hi def link javaTextBlockError		Error943hi def link javaParenError		javaError944hi def link javaStatement		Statement945hi def link javaOperator		Operator946hi def link javaConstant		Constant947hi def link javaTypedef			Typedef948hi def link javaTodo			Todo949hi def link javaAnnotation		PreProc950hi def link javaAnnotationStart		javaAnnotation951hi def link javaType			Type952hi def link javaExternal		Include953hi def link javaModuleImport		Statement954 955hi def link javaUserLabel		Label956hi def link javaUserLabelRef		javaUserLabel957hi def link javaLabel			Label958hi def link javaLabelDefault		javaLabel959hi def link javaLabelVarType		javaOperator960 961hi def link javaComment			Comment962hi def link javaCommentStar		javaComment963hi def link javaLineComment		Comment964hi def link javaCommentMarkupTagAttr	javaHtmlArg965hi def link javaCommentString		javaString966hi def link javaComment2String		javaString967hi def link javaCommentCharacter	javaCharacter968hi def link javaCommentError		javaError969hi def link javaCommentStart		javaComment970 971hi def link javaHtmlArg			Type972hi def link javaHtmlString		String973 974let b:current_syntax = "java"975 976if g:main_syntax == 'java'977  unlet g:main_syntax978endif979 980if exists("s:clear_java_ignore_html")981  unlet! s:clear_java_ignore_html g:java_ignore_html982endif983 984if exists("s:clear_java_ignore_markdown")985  unlet! s:clear_java_ignore_markdown g:java_ignore_markdown986endif987 988let b:spell_options = "contained"989let &cpo = s:cpo_save990unlet s:cpo_save s:ff s:vv s:with_html s:with_markdown991 992" See ":help vim9-mix".993if !has("vim9script")994  finish995endif996 997if exists("g:java_foldtext_show_first_or_second_line")998  def! s:LazyPrefix(prefix: string, dashes: string, count: number): string999    return empty(prefix)1000      ? printf('+-%s%3d lines: ', dashes, count)1001      : prefix1002  enddef1003 1004  def! s:JavaSyntaxFoldTextExpr(): string1005    # Piggyback on NGETTEXT.1006    const summary: string = foldtext()1007    return getline(v:foldstart) !~ '/\*\+\s*$'1008      ? summary1009      : LazyPrefix(matchstr(summary, '^+-\+\s*\d\+\s.\{-1,}:\s'),1010			v:folddashes,1011			(v:foldend - v:foldstart + 1)) ..1012	  getline(v:foldstart + 1)1013  enddef1014 1015  setlocal foldtext=s:JavaSyntaxFoldTextExpr()1016  delfunction! g:JavaSyntaxFoldTextExpr1017endif1018" vim: fdm=syntax sw=2 ts=8 noet sta1019 
codekingpro/portable-devtools · Team Ai