blob: ff9b4b04be44fd287499408871764f493d06074e [file] [log] [blame]
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +02001" Vim syntax file
Aliaksei Budavei40524742024-04-14 19:57:00 +03002" Language: Java
3" Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com>
4" Former Maintainer: Claudio Fleiner <claudio@fleiner.com>
5" Repository: https://github.com/zzzyxwvut/java-vim.git
Aliaksei Budaveic4d0c8c2024-04-29 21:24:35 +03006" Last Change: 2024 Apr 28
Bram Moolenaar071d4272004-06-13 20:20:40 +00007
8" Please check :help java.vim for comments on some of the options available.
9
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020010" quit when a syntax file was already loaded
Bram Moolenaar071d4272004-06-13 20:20:40 +000011if !exists("main_syntax")
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020012 if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000013 finish
14 endif
15 " we define it here so that included files can test for it
16 let main_syntax='java'
Bram Moolenaar5c736222010-01-06 20:54:52 +010017 syn region javaFold start="{" end="}" transparent fold
Bram Moolenaar071d4272004-06-13 20:20:40 +000018endif
19
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020020let s:cpo_save = &cpo
21set cpo&vim
22
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020023" Admit the ASCII dollar sign to keyword characters (JLS-17, §3.8):
24execute printf('syntax iskeyword %s,$', &l:iskeyword)
25
Bram Moolenaar071d4272004-06-13 20:20:40 +000026" some characters that cannot be in a java program (outside a string)
27syn match javaError "[\\@`]"
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +010028syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020029
Bram Moolenaar071d4272004-06-13 20:20:40 +000030" use separate name so that it can be deleted in javacc.vim
31syn match javaError2 "#\|=<"
Bram Moolenaarf37506f2016-08-31 22:22:10 +020032hi def link javaError2 javaError
Bram Moolenaar071d4272004-06-13 20:20:40 +000033
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020034" Keywords (JLS-17, §3.9):
Bram Moolenaar071d4272004-06-13 20:20:40 +000035syn keyword javaExternal native package
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020036syn match javaExternal "\<import\>\%(\s\+static\>\)\="
Bram Moolenaar071d4272004-06-13 20:20:40 +000037syn keyword javaError goto const
38syn keyword javaConditional if else switch
39syn keyword javaRepeat while for do
40syn keyword javaBoolean true false
41syn keyword javaConstant null
42syn keyword javaTypedef this super
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020043syn keyword javaOperator new instanceof
44syn match javaOperator "\<var\>\%(\s*(\)\@!"
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +010045" Since the yield statement, which could take a parenthesised operand,
46" and _qualified_ yield methods get along within the switch block
47" (JLS-17, §3.8), it seems futile to make a region definition for this
48" block; instead look for the _yield_ word alone, and if found,
49" backtrack (arbitrarily) 80 bytes, at most, on the matched line and,
50" if necessary, on the line before that (h: \@<=), trying to match
51" neither a method reference nor a qualified method invocation.
52syn match javaOperator "\%(\%(::\|\.\)[[:space:]\n]*\)\@80<!\<yield\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000053syn keyword javaType boolean char byte short int long float double
54syn keyword javaType void
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +010055syn keyword javaStatement return
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020056syn keyword javaStorageClass static synchronized transient volatile strictfp serializable
Bram Moolenaar071d4272004-06-13 20:20:40 +000057syn keyword javaExceptions throw try catch finally
58syn keyword javaAssert assert
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020059syn keyword javaMethodDecl throws
60" Differentiate a "MyClass.class" literal from the keyword "class".
Bram Moolenaar071d4272004-06-13 20:20:40 +000061syn match javaTypedef "\.\s*\<class\>"ms=s+1
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020062syn keyword javaClassDecl enum extends implements interface
63syn match javaClassDecl "\<permits\>\%(\s*(\)\@!"
64syn match javaClassDecl "\<record\>\%(\s*(\)\@!"
Bram Moolenaar071d4272004-06-13 20:20:40 +000065syn match javaClassDecl "^class\>"
66syn match javaClassDecl "[^.]\s*\<class\>"ms=s+1
Aliaksei Budavei40524742024-04-14 19:57:00 +030067syn match javaAnnotation "@\%(\K\k*\.\)*\K\k*\>"
Bram Moolenaar00a927d2010-05-14 23:24:24 +020068syn match javaClassDecl "@interface\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000069syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite
70syn match javaUserLabelRef "\k\+" contained
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000071syn match javaVarArg "\.\.\."
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020072syn keyword javaScopeDecl public protected private
73syn keyword javaConceptKind abstract final
74syn match javaConceptKind "\<non-sealed\>"
75syn match javaConceptKind "\<sealed\>\%(\s*(\)\@!"
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +010076syn match javaConceptKind "\<default\>\%(\s*\%(:\|->\)\)\@!"
Bram Moolenaar071d4272004-06-13 20:20:40 +000077
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020078" Note that a "module-info" file will be recognised with an arbitrary
79" file extension (or no extension at all) so that more than one such
80" declaration for the same Java module can be maintained for modular
81" testing in a project without attendant confusion for IDEs, with the
82" ".java\=" extension used for a production version and an arbitrary
83" extension used for a testing version.
84let s:module_info_cur_buf = fnamemodify(bufname("%"), ":t") =~ '^module-info\%(\.class\>\)\@!'
Aliaksei Budaveia4c085a2024-04-24 21:04:25 +020085let s:selectable_regexp_engine = !(v:version < 704)
86lockvar s:selectable_regexp_engine s:module_info_cur_buf
Bram Moolenaar63f32602022-06-09 20:45:54 +010087
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020088" Java modules (since Java 9, for "module-info.java" file).
89if s:module_info_cur_buf
90 syn keyword javaModuleStorageClass module transitive
91 syn keyword javaModuleStmt open requires exports opens uses provides
92 syn keyword javaModuleExternal to with
93 syn cluster javaTop add=javaModuleStorageClass,javaModuleStmt,javaModuleExternal
Bram Moolenaar91f84f62018-07-29 15:07:52 +020094endif
95
Bram Moolenaar8ada17c2006-01-19 22:16:24 +000096if exists("java_highlight_java_lang_ids")
97 let java_highlight_all=1
98endif
Bram Moolenaar91f84f62018-07-29 15:07:52 +020099if exists("java_highlight_all") || exists("java_highlight_java") || exists("java_highlight_java_lang")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000100 " java.lang.*
Bram Moolenaar63f32602022-06-09 20:45:54 +0100101 "
102 " The keywords of javaR_JavaLang, javaC_JavaLang, javaE_JavaLang,
103 " and javaX_JavaLang are sub-grouped according to the Java version
104 " of their introduction, and sub-group keywords (that is, class
105 " names) are arranged in alphabetical order, so that future newer
106 " keywords can be pre-sorted and appended without disturbing
107 " the current keyword placement. The below _match_es follow suit.
108
Aliaksei Budavei63d68c22024-03-26 20:12:05 +0300109 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 MatchException
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000110 syn cluster javaTop add=javaR_JavaLang
111 syn cluster javaClasses add=javaR_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200112 hi def link javaR_JavaLang javaR_Java
Bram Moolenaar63f32602022-06-09 20:45:54 +0100113 " Member enumerations:
114 syn match javaC_JavaLang "\%(\<Thread\.\)\@<=\<State\>"
115 syn match javaC_JavaLang "\%(\<Character\.\)\@<=\<UnicodeScript\>"
116 syn match javaC_JavaLang "\%(\<ProcessBuilder\.Redirect\.\)\@<=\<Type\>"
117 syn match javaC_JavaLang "\%(\<StackWalker\.\)\@<=\<Option\>"
118 syn match javaC_JavaLang "\%(\<System\.Logger\.\)\@<=\<Level\>"
119 " Member classes:
120 syn match javaC_JavaLang "\%(\<Character\.\)\@<=\<Subset\>"
121 syn match javaC_JavaLang "\%(\<Character\.\)\@<=\<UnicodeBlock\>"
122 syn match javaC_JavaLang "\%(\<ProcessBuilder\.\)\@<=\<Redirect\>"
123 syn match javaC_JavaLang "\%(\<ModuleLayer\.\)\@<=\<Controller\>"
124 syn match javaC_JavaLang "\%(\<Runtime\.\)\@<=\<Version\>"
125 syn match javaC_JavaLang "\%(\<System\.\)\@<=\<LoggerFinder\>"
126 syn match javaC_JavaLang "\%(\<Enum\.\)\@<=\<EnumDesc\>"
127 syn keyword javaC_JavaLang Boolean Character Class ClassLoader Compiler Double Float Integer Long Math Number Object Process Runtime SecurityManager String StringBuffer Thread ThreadGroup Byte Short Void InheritableThreadLocal Package RuntimePermission ThreadLocal StrictMath StackTraceElement Enum ProcessBuilder StringBuilder ClassValue Module ModuleLayer StackWalker Record
128 syn match javaC_JavaLang "\<System\>" " See javaDebug.
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +0200129 " As of JDK 21, java.lang.Compiler is no more (deprecated in JDK 9).
Aliaksei Budavei63d68c22024-03-26 20:12:05 +0300130 syn keyword javaLangDeprecated Compiler
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000131 syn cluster javaTop add=javaC_JavaLang
132 syn cluster javaClasses add=javaC_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200133 hi def link javaC_JavaLang javaC_Java
Bram Moolenaar63f32602022-06-09 20:45:54 +0100134 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 BootstrapMethodError
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000135 syn cluster javaTop add=javaE_JavaLang
136 syn cluster javaClasses add=javaE_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200137 hi def link javaE_JavaLang javaE_Java
Bram Moolenaar63f32602022-06-09 20:45:54 +0100138 syn keyword javaX_JavaLang ClassNotFoundException CloneNotSupportedException Exception IllegalAccessException InstantiationException InterruptedException NoSuchMethodException Throwable NoSuchFieldException ReflectiveOperationException
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000139 syn cluster javaTop add=javaX_JavaLang
140 syn cluster javaClasses add=javaX_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200141 hi def link javaX_JavaLang javaX_Java
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000142
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200143 hi def link javaR_Java javaR_
144 hi def link javaC_Java javaC_
145 hi def link javaE_Java javaE_
146 hi def link javaX_Java javaX_
147 hi def link javaX_ javaExceptions
148 hi def link javaR_ javaExceptions
149 hi def link javaE_ javaExceptions
150 hi def link javaC_ javaConstant
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000151
Bram Moolenaar071d4272004-06-13 20:20:40 +0000152 syn keyword javaLangObject clone equals finalize getClass hashCode
153 syn keyword javaLangObject notify notifyAll toString wait
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200154 hi def link javaLangObject javaConstant
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000155 syn cluster javaTop add=javaLangObject
Bram Moolenaar071d4272004-06-13 20:20:40 +0000156endif
157
158if filereadable(expand("<sfile>:p:h")."/javaid.vim")
159 source <sfile>:p:h/javaid.vim
160endif
161
162if exists("java_space_errors")
163 if !exists("java_no_trail_space_error")
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200164 syn match javaSpaceError "\s\+$"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000165 endif
166 if !exists("java_no_tab_space_error")
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200167 syn match javaSpaceError " \+\t"me=e-1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000168 endif
169endif
170
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +0100171syn match javaUserLabel "^\s*\<\K\k*\>\%(\<default\>\)\@<!\s*:"he=e-1
172syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaLabelCastType,javaLabelNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
173syn region javaLabelRegion transparent matchgroup=javaLabel start="\<default\>\%(\s*\%(:\|->\)\)\@=" matchgroup=NONE end=":\|->" oneline
174" Consider grouped _default_ _case_ labels, i.e.
175" case null, default ->
176" case null: default:
177syn keyword javaLabelDefault contained default
178syn keyword javaLabelVarType contained var
179syn keyword javaLabelCastType contained char byte short int
180" Allow for the contingency of the enclosing region not being able to
181" _keep_ its _end_, e.g. case ':':.
182syn region javaLabelWhenClause contained transparent matchgroup=javaLabel start="\<when\>" matchgroup=NONE end=":"me=e-1 end="->"me=e-2 contains=TOP,javaExternal
183syn match javaLabelNumber contained "\<0\>[lL]\@!"
184syn match javaLabelNumber contained "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)\>[lL]\@!"
185hi def link javaLabelDefault javaLabel
186hi def link javaLabelVarType javaOperator
187hi def link javaLabelNumber javaNumber
188hi def link javaLabelCastType javaType
Bram Moolenaar071d4272004-06-13 20:20:40 +0000189
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100190" highlighting C++ keywords as errors removed, too many people find it
191" annoying. Was: if !exists("java_allow_cpp_keywords")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000192
193" The following cluster contains all java groups except the contained ones
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +0100194syn cluster javaTop add=javaExternal,javaError,javaBranch,javaLabelRegion,javaConditional,javaRepeat,javaBoolean,javaConstant,javaTypedef,javaOperator,javaType,javaStatement,javaStorageClass,javaAssert,javaExceptions,javaMethodDecl,javaClassDecl,javaScopeDecl,javaConceptKind,javaError2,javaUserLabel,javaLangObject,javaAnnotation,javaVarArg
Bram Moolenaar071d4272004-06-13 20:20:40 +0000195
196
197" Comments
198syn keyword javaTodo contained TODO FIXME XXX
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300199
Bram Moolenaar071d4272004-06-13 20:20:40 +0000200if exists("java_comment_strings")
201 syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300202 syn region javaCommentString contained start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell,javaSpecialError,javaTextBlockError
203 syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000204 syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
205 syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar
206 syn match javaCommentCharacter contained "'[^\\]'"
Aliaksei Budaveia2c65802024-03-09 20:03:11 +0300207 syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber,javaStrTempl
208 syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber,javaStrTempl
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209endif
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300210
Aliaksei Budavei8e59a7b2024-03-25 18:18:28 +0300211syn region javaComment matchgroup=javaCommentStart start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,javaCommentError,javaSpaceError,@Spell
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200212syn match javaCommentStar contained "^\s*\*[^/]"me=e-1
213syn match javaCommentStar contained "^\s*\*$"
Aliaksei Budavei3e72bf12024-03-22 21:32:48 +0300214syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,javaCommentMarkupTag,javaSpaceError,@Spell
Aliaksei Budavei8e59a7b2024-03-25 18:18:28 +0300215syn match javaCommentMarkupTag contained "@\%(end\|highlight\|link\|replace\|start\)\>" nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite
216syn match javaCommentMarkupTagAttr contained "\<region\>" nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite
217syn region javaCommentMarkupTagAttr contained transparent matchgroup=htmlArg start=/\<\%(re\%(gex\|gion\|placement\)\|substring\|t\%(arget\|ype\)\)\%(\s*=\)\@=/ matchgroup=htmlString end=/\%(=\s*\)\@<=\%("[^"]\+"\|'[^']\+'\|\%([.-]\|\k\)\+\)/ nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite oneline
Aliaksei Budavei3e72bf12024-03-22 21:32:48 +0300218hi def link javaCommentMarkupTagAttr htmlArg
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200219hi def link javaCommentString javaString
220hi def link javaComment2String javaString
221hi def link javaCommentCharacter javaCharacter
Aliaksei Budavei8e59a7b2024-03-25 18:18:28 +0300222syn match javaCommentError contained "/\*"me=e-1 display
223hi def link javaCommentError javaError
224hi def link javaCommentStart javaComment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000225
226syn cluster javaTop add=javaComment,javaLineComment
227
228if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
229 syntax case ignore
230 " syntax coloring for javadoc comments (HTML)
Bram Moolenaar63f32602022-06-09 20:45:54 +0100231 syntax include @javaHtml syntax/html.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000232 unlet b:current_syntax
Bram Moolenaar5c736222010-01-06 20:54:52 +0100233 " HTML enables spell checking for all text that is not in a syntax item. This
234 " is wrong for Java (all identifiers would be spell-checked), so it's undone
235 " here.
236 syntax spell default
237
Aliaksei Budavei8e59a7b2024-03-25 18:18:28 +0300238 syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaDocCodeTag,javaDocSnippetTag,javaTodo,javaCommentError,javaSpaceError,@Spell
239 syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*" matchgroup=javaCommentTitle end="\.$" end="\.[ \t\r]\@=" end="\%(^\s*\**\s*\)\@<=@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,javaDocTags,javaDocSeeTag,javaDocCodeTag,javaDocSnippetTag
240 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,javaDocSeeTag,javaDocCodeTag,javaDocSnippetTag
Aliaksei Budavei3e72bf12024-03-22 21:32:48 +0300241 syn region javaDocTags contained start="{@\%(li\%(teral\|nk\%(plain\)\=\)\|inherit[Dd]oc\|doc[rR]oot\|value\)\>" end="}"
Aliaksei Budavei8e59a7b2024-03-25 18:18:28 +0300242 syn match javaDocTags contained "@\%(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
243 syn match javaDocParam contained "\s\S\+"
244 syn match javaDocTags contained "@\%(version\|author\|return\|deprecated\|serial\%(Field\|Data\)\=\)\>"
245 syn region javaDocSeeTag contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
246 syn match javaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\%(\k\|\.\)*\%(#\k\+\%((\_[^)]*)\)\=\)\=@ contains=@javaHtml extend
Aliaksei Budavei3e72bf12024-03-22 21:32:48 +0300247 syn region javaCodeSkipBlock contained transparent start="{\%(@code\>\)\@!" end="}" contains=javaCodeSkipBlock,javaDocCodeTag
248 syn region javaDocCodeTag contained start="{@code\>" end="}" contains=javaDocCodeTag,javaCodeSkipBlock
Aliaksei Budavei8e59a7b2024-03-25 18:18:28 +0300249 syn region javaDocSnippetTagAttr contained transparent matchgroup=htmlArg start=/\<\%(class\|file\|id\|lang\|region\)\%(\s*=\)\@=/ matchgroup=htmlString end=/:$/ end=/\%(=\s*\)\@<=\%("[^"]\+"\|'[^']\+'\|\%([.\\/-]\|\k\)\+\)/ nextgroup=javaDocSnippetTagAttr skipwhite skipnl
Aliaksei Budavei3e72bf12024-03-22 21:32:48 +0300250 syn region javaSnippetSkipBlock contained transparent start="{\%(@snippet\>\)\@!" end="}" contains=javaSnippetSkipBlock,javaDocSnippetTag,javaCommentMarkupTag
251 syn region javaDocSnippetTag contained start="{@snippet\>" end="}" contains=javaDocSnippetTag,javaSnippetSkipBlock,javaDocSnippetTagAttr,javaCommentMarkupTag
Bram Moolenaar071d4272004-06-13 20:20:40 +0000252 syntax case match
253endif
254
255" match the special comment /**/
256syn match javaComment "/\*\*/"
257
258" Strings and constants
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200259syn match javaSpecialError contained "\\."
Bram Moolenaar071d4272004-06-13 20:20:40 +0000260syn match javaSpecialCharError contained "[^']"
Aliaksei Budavei100a6652024-03-02 01:11:14 +0300261" Escape Sequences (JLS-17, §3.10.7):
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300262syn match javaSpecialChar contained "\\\%(u\x\x\x\x\|[0-3]\o\o\|\o\o\=\|[bstnfr"'\\]\)"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000263syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300264syn region javaString start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell
265syn match javaTextBlockError +"""\s*"""+
Aliaksei Budaveia2c65802024-03-09 20:03:11 +0300266syn region javaStrTemplEmbExp contained matchgroup=javaStrTempl start="\\{" end="}" contains=TOP
267syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@<="+ end=+"+ contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,@Spell
268syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@<="""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell
Aliaksei Budavei100a6652024-03-02 01:11:14 +0300269" The next line is commented out, it can cause a crash for a long line
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300270"syn match javaStringError +"\%([^"\\]\|\\.\)*$+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000271syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
272syn match javaCharacter "'\\''" contains=javaSpecialChar
273syn match javaCharacter "'[^\\]'"
Aliaksei Budavei100a6652024-03-02 01:11:14 +0300274" Integer literals (JLS-17, §3.10.1):
275syn keyword javaNumber 0 0l 0L
276syn match javaNumber "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)[lL]\=\>"
277" Decimal floating-point literals (JLS-17, §3.10.2):
278" Against "\<\d\+\>\.":
279syn match javaNumber "\<\d\%(_*\d\)*\."
280syn match javaNumber "\%(\<\d\%(_*\d\)*\.\%(\d\%(_*\d\)*\)\=\|\.\d\%(_*\d\)*\)\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\=\>"
281syn match javaNumber "\<\d\%(_*\d\)*[eE][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
282syn match javaNumber "\<\d\%(_*\d\)*\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\>"
283" Hexadecimal floating-point literals (JLS-17, §3.10.2):
284syn match javaNumber "\<0[xX]\%(\x\%(_*\x\)*\.\=\|\%(\x\%(_*\x\)*\)\=\.\x\%(_*\x\)*\)[pP][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000285
Aliaksei Budavei100a6652024-03-02 01:11:14 +0300286" Unicode characters
287syn match javaSpecial "\\u\x\x\x\x"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000288
Aliaksei Budaveia2c65802024-03-09 20:03:11 +0300289syn cluster javaTop add=javaString,javaStrTempl,javaCharacter,javaNumber,javaSpecial,javaStringError,javaTextBlockError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000290
Aliaksei Budaveia4c085a2024-04-24 21:04:25 +0200291" Method declarations (JLS-17, §8.4.3, §8.4.4, §9.4).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000292if exists("java_highlight_functions")
Aliaksei Budaveia4c085a2024-04-24 21:04:25 +0200293 syn cluster javaFuncParams contains=javaAnnotation,@javaClasses,javaType,javaVarArg,javaComment,javaLineComment
294
Aliaksei Budaveic4d0c8c2024-04-29 21:24:35 +0300295 if java_highlight_functions =~# '^indent[1-8]\=$'
296 let s:last = java_highlight_functions[-1 :]
297 let s:indent = s:last != 't' ? repeat("\x20", s:last) : "\t"
Aliaksei Budaveia4c085a2024-04-24 21:04:25 +0200298 syn cluster javaFuncParams add=javaScopeDecl,javaConceptKind,javaStorageClass,javaExternal
Aliaksei Budaveic4d0c8c2024-04-29 21:24:35 +0300299 " Try to not match other type members, initialiser blocks, enum
300 " constants (JLS-17, §8.9.1), and constructors (JLS-17, §8.1.7):
301 " at any _conventional_ indentation, skip over all fields with
302 " "[^=]*", all records with "\<record\s", and let the "*Skip*"
303 " definitions take care of constructor declarations and enum
304 " constants (with no support for @Foo(value = "bar")).
305 exec 'syn region javaFuncDef start=+^' . s:indent . '\%(<[^>]\+>\+\s\+\|\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)\+\)\=\%(\<\K\k*\>\.\)*\K\k*\>[^=]*\%(\<record\)\@6<!\s\K\k*\s*(+ end=+)+ contains=@javaFuncParams'
306 " As long as package-private constructors cannot be matched with
307 " javaFuncDef, do not look with javaConstructorSkipDeclarator for
308 " them.
309 exec 'syn match javaConstructorSkipDeclarator transparent +^' . s:indent . '\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*p\%(ublic\|rotected\|rivate\)\s\+\%(<[^>]\+>\+\s\+\)\=\K\k*\s*\ze(+ contains=javaAnnotation,javaScopeDecl'
310 exec 'syn match javaEnumSkipArgumentativeConstant transparent +^' . s:indent . '\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\K\k*\s*\ze(+ contains=javaAnnotation'
311 unlet s:indent s:last
Bram Moolenaar071d4272004-06-13 20:20:40 +0000312 else
Aliaksei Budavei40524742024-04-14 19:57:00 +0300313 " This is the "style" variant (:help ft-java-syntax).
Aliaksei Budaveia4c085a2024-04-24 21:04:25 +0200314 syn cluster javaFuncParams add=javaScopeDecl,javaConceptKind,javaStorageClass,javaExternal
315
316 " Match arbitrarily indented camelCasedName method declarations.
317 " Match: [@ɐ] [abstract] [<α, β>] Τʬ[<γ>][[][]] μʭʭ(/* ... */);
318
319 if s:selectable_regexp_engine
320 " Request the new regexp engine for [:upper:] and [:lower:].
321 syn region javaFuncDef start=/\%#=2^\s\+\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(\%(abstract\|default\)\s\+\|\%(\%(final\|\%(native\|strictfp\)\|s\%(tatic\|ynchronized\)\)\s\+\)*\)\=\%(<.*[[:space:]-]\@1<!>\s\+\)\=\%(void\|\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\|\%(\<\K\k*\>\.\)*\<[$_[:upper:]]\k*\>\%(<[^(){}]*[[:space:]-]\@1<!>\)\=\)\%(\[\]\)*\)\s\+\<[$_[:lower:]]\k*\>\s*(/ end=/)/ skip=/\/\*.\{-}\*\/\|\/\/.*$/ contains=@javaFuncParams
322 else
323 " XXX: \C\<[^a-z0-9]\k*\> rejects "type", but matches "τύπος".
324 " XXX: \C\<[^A-Z0-9]\k*\> rejects "Method", but matches "Μέθοδος".
325 syn region javaFuncDef start=/^\s\+\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(\%(abstract\|default\)\s\+\|\%(\%(final\|\%(native\|strictfp\)\|s\%(tatic\|ynchronized\)\)\s\+\)*\)\=\%(<.*[[:space:]-]\@1<!>\s\+\)\=\%(void\|\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\|\%(\<\K\k*\>\.\)*\<[^a-z0-9]\k*\>\%(<[^(){}]*[[:space:]-]\@1<!>\)\=\)\%(\[\]\)*\)\s\+\<[^A-Z0-9]\k*\>\s*(/ end=/)/ skip=/\/\*.\{-}\*\/\|\/\/.*$/ contains=@javaFuncParams
326 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000327 endif
Aliaksei Budavei40524742024-04-14 19:57:00 +0300328
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +0100329 syn match javaLambdaDef "\<\K\k*\>\%(\<default\>\)\@<!\s*->"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000330 syn match javaBraces "[{}]"
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100331 syn cluster javaTop add=javaFuncDef,javaBraces,javaLambdaDef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000332endif
333
334if exists("java_highlight_debug")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000335 " Strings and constants
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300336 syn match javaDebugSpecial contained "\\\%(u\x\x\x\x\|[0-3]\o\o\|\o\o\=\|[bstnfr"'\\]\)"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000337 syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300338 syn region javaDebugString contained start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaDebugSpecial,javaDebugTextBlockError
Aliaksei Budaveia2c65802024-03-09 20:03:11 +0300339 " The highlight groups of java{StrTempl,Debug{,Paren,StrTempl}}\,
340 " share one colour by default. Do not conflate unrelated parens.
341 syn region javaDebugStrTemplEmbExp contained matchgroup=javaDebugStrTempl start="\\{" end="}" contains=javaComment,javaLineComment,javaDebug\%(Paren\)\@!.*
342 syn region javaDebugStrTempl contained start=+\%(\.[[:space:]\n]*\)\@<="+ end=+"+ contains=javaDebugStrTemplEmbExp,javaDebugSpecial
343 syn region javaDebugStrTempl contained start=+\%(\.[[:space:]\n]*\)\@<="""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaDebugStrTemplEmbExp,javaDebugSpecial,javaDebugTextBlockError
344 " The next line is commented out, it can cause a crash for a long line
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300345" syn match javaDebugStringError contained +"\%([^"\\]\|\\.\)*$+
346 syn match javaDebugTextBlockError contained +"""\s*"""+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000347 syn match javaDebugCharacter contained "'[^\\]'"
348 syn match javaDebugSpecialCharacter contained "'\\.'"
349 syn match javaDebugSpecialCharacter contained "'\\''"
Aliaksei Budavei100a6652024-03-02 01:11:14 +0300350 syn keyword javaDebugNumber contained 0 0l 0L
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300351 syn match javaDebugNumber contained "\<\d\%(_*\d\)*\."
Aliaksei Budavei100a6652024-03-02 01:11:14 +0300352 syn match javaDebugNumber contained "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)[lL]\=\>"
353 syn match javaDebugNumber contained "\%(\<\d\%(_*\d\)*\.\%(\d\%(_*\d\)*\)\=\|\.\d\%(_*\d\)*\)\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\=\>"
354 syn match javaDebugNumber contained "\<\d\%(_*\d\)*[eE][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
355 syn match javaDebugNumber contained "\<\d\%(_*\d\)*\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\>"
356 syn match javaDebugNumber contained "\<0[xX]\%(\x\%(_*\x\)*\.\=\|\%(\x\%(_*\x\)*\)\=\.\x\%(_*\x\)*\)[pP][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000357 syn keyword javaDebugBoolean contained true false
358 syn keyword javaDebugType contained null this super
359 syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
360
Aliaksei Budavei40524742024-04-14 19:57:00 +0300361 " To make this work, define the highlighting for these groups.
362 syn match javaDebug "\<System\.\%(out\|err\)\.print\%(ln\)\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
363" FIXME: What API does "p" belong to?
364" syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
365 syn match javaDebug "\<\K\k*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
366" FIXME: What API do "trace*" belong to?
367" syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar071d4272004-06-13 20:20:40 +0000368
369 syn cluster javaTop add=javaDebug
370
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200371 hi def link javaDebug Debug
372 hi def link javaDebugString DebugString
Aliaksei Budaveia2c65802024-03-09 20:03:11 +0300373 hi def link javaDebugStrTempl Macro
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200374 hi def link javaDebugStringError javaError
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300375 hi def link javaDebugTextBlockError javaDebugStringError
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200376 hi def link javaDebugType DebugType
377 hi def link javaDebugBoolean DebugBoolean
378 hi def link javaDebugNumber Debug
379 hi def link javaDebugSpecial DebugSpecial
380 hi def link javaDebugSpecialCharacter DebugSpecial
381 hi def link javaDebugCharacter DebugString
382 hi def link javaDebugParen Debug
Bram Moolenaar071d4272004-06-13 20:20:40 +0000383
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200384 hi def link DebugString String
385 hi def link DebugSpecial Special
386 hi def link DebugBoolean Boolean
387 hi def link DebugType Type
Bram Moolenaar071d4272004-06-13 20:20:40 +0000388endif
389
390if exists("java_mark_braces_in_parens_as_errors")
391 syn match javaInParen contained "[{}]"
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200392 hi def link javaInParen javaError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000393 syn cluster javaTop add=javaInParen
394endif
395
396" catch errors caused by wrong parenthesis
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100397syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000398syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
399syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200400syn match javaParenError ")"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000401" catch errors caused by wrong square parenthesis
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100402syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000403syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
404syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200405syn match javaParenError "\]"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000406
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200407hi def link javaParenError javaError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000408
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100409if exists("java_highlight_functions")
Aliaksei Budavei40524742024-04-14 19:57:00 +0300410 " Make ()-matching definitions after the parenthesis error catcher.
411 syn match javaLambdaDef "\k\@4<!(\%(\k\|[[:space:]<>?\[\]@,.]\)*)\s*->"
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100412endif
413
Bram Moolenaar071d4272004-06-13 20:20:40 +0000414if !exists("java_minlines")
415 let java_minlines = 10
416endif
Aliaksei Budavei8e59a7b2024-03-25 18:18:28 +0300417
418" Note that variations of a /*/ balanced comment, e.g., /*/*/, /*//*/,
419" /* /*/, /* /*/, etc., may have their rightmost /*/ part accepted
420" as a comment start by ':syntax sync ccomment'; consider alternatives
421" to make synchronisation start further towards file's beginning by
422" bumping up g:java_minlines or issuing ':syntax sync fromstart' or
423" preferring &foldmethod set to 'syntax'.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000424exec "syn sync ccomment javaComment minlines=" . java_minlines
425
426" The default highlighting.
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200427hi def link javaLambdaDef Function
428hi def link javaFuncDef Function
429hi def link javaVarArg Function
430hi def link javaBraces Function
431hi def link javaBranch Conditional
432hi def link javaUserLabelRef javaUserLabel
433hi def link javaLabel Label
434hi def link javaUserLabel Label
435hi def link javaConditional Conditional
436hi def link javaRepeat Repeat
437hi def link javaExceptions Exception
438hi def link javaAssert Statement
439hi def link javaStorageClass StorageClass
440hi def link javaMethodDecl javaStorageClass
441hi def link javaClassDecl javaStorageClass
442hi def link javaScopeDecl javaStorageClass
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +0100443hi def link javaConceptKind NonText
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200444
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200445hi def link javaBoolean Boolean
446hi def link javaSpecial Special
447hi def link javaSpecialError Error
448hi def link javaSpecialCharError Error
449hi def link javaString String
Aliaksei Budaveia2c65802024-03-09 20:03:11 +0300450hi def link javaStrTempl Macro
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200451hi def link javaCharacter Character
452hi def link javaSpecialChar SpecialChar
453hi def link javaNumber Number
454hi def link javaError Error
455hi def link javaStringError Error
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300456hi def link javaTextBlockError javaStringError
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200457hi def link javaStatement Statement
458hi def link javaOperator Operator
459hi def link javaComment Comment
460hi def link javaDocComment Comment
461hi def link javaLineComment Comment
462hi def link javaConstant Constant
463hi def link javaTypedef Typedef
464hi def link javaTodo Todo
465hi def link javaAnnotation PreProc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000466
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200467hi def link javaCommentTitle SpecialComment
468hi def link javaDocTags Special
Aliaksei Budavei3e72bf12024-03-22 21:32:48 +0300469hi def link javaDocCodeTag Special
470hi def link javaDocSnippetTag Special
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200471hi def link javaDocParam Function
472hi def link javaDocSeeTagParam Function
473hi def link javaCommentStar javaComment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000474
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200475hi def link javaType Type
476hi def link javaExternal Include
Bram Moolenaar071d4272004-06-13 20:20:40 +0000477
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200478hi def link htmlComment Special
479hi def link htmlCommentPart Special
Aliaksei Budavei3e72bf12024-03-22 21:32:48 +0300480hi def link htmlArg Type
481hi def link htmlString String
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200482hi def link javaSpaceError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000483
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +0200484if s:module_info_cur_buf
485 hi def link javaModuleStorageClass StorageClass
486 hi def link javaModuleStmt Statement
487 hi def link javaModuleExternal Include
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200488endif
489
Bram Moolenaar071d4272004-06-13 20:20:40 +0000490let b:current_syntax = "java"
491
492if main_syntax == 'java'
493 unlet main_syntax
494endif
495
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +0200496let b:spell_options = "contained"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200497let &cpo = s:cpo_save
Aliaksei Budaveia4c085a2024-04-24 21:04:25 +0200498unlet s:selectable_regexp_engine s:module_info_cur_buf s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000499
500" vim: ts=8