blob: 9867b147c2b4f75c44f9dffe61b371d975315c3d [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 Budaveid3952e82024-05-11 00:39:31 +03006" Last Change: 2024 May 10
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 Budaveid3952e82024-05-11 00:39:31 +030023"""" STRIVE TO REMAIN COMPATIBLE FOR AT LEAST VIM 7.0.
24let s:ff = {}
25
26function! s:ff.LeftConstant(x, y) abort
27 return a:x
28endfunction
29
30function! s:ff.RightConstant(x, y) abort
31 return a:y
32endfunction
33
34if !exists("*s:ReportOnce")
35 function s:ReportOnce(message) abort
36 echomsg 'syntax/java.vim: ' . a:message
37 endfunction
38else
39 function! s:ReportOnce(dummy)
40 endfunction
41endif
42
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020043" Admit the ASCII dollar sign to keyword characters (JLS-17, §3.8):
Aliaksei Budaveid3952e82024-05-11 00:39:31 +030044try
45 exec 'syntax iskeyword ' . &l:iskeyword . ',$'
46catch /\<E410:/
47 call s:ReportOnce(v:exception)
48 setlocal iskeyword+=$
49endtry
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020050
Bram Moolenaar071d4272004-06-13 20:20:40 +000051" some characters that cannot be in a java program (outside a string)
52syn match javaError "[\\@`]"
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +010053syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020054
Bram Moolenaar071d4272004-06-13 20:20:40 +000055" use separate name so that it can be deleted in javacc.vim
56syn match javaError2 "#\|=<"
Bram Moolenaarf37506f2016-08-31 22:22:10 +020057hi def link javaError2 javaError
Bram Moolenaar071d4272004-06-13 20:20:40 +000058
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020059" Keywords (JLS-17, §3.9):
Bram Moolenaar071d4272004-06-13 20:20:40 +000060syn keyword javaExternal native package
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020061syn match javaExternal "\<import\>\%(\s\+static\>\)\="
Bram Moolenaar071d4272004-06-13 20:20:40 +000062syn keyword javaError goto const
63syn keyword javaConditional if else switch
64syn keyword javaRepeat while for do
65syn keyword javaBoolean true false
66syn keyword javaConstant null
67syn keyword javaTypedef this super
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020068syn keyword javaOperator new instanceof
69syn match javaOperator "\<var\>\%(\s*(\)\@!"
Aliaksei Budaveid3952e82024-05-11 00:39:31 +030070
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +010071" Since the yield statement, which could take a parenthesised operand,
72" and _qualified_ yield methods get along within the switch block
73" (JLS-17, §3.8), it seems futile to make a region definition for this
74" block; instead look for the _yield_ word alone, and if found,
75" backtrack (arbitrarily) 80 bytes, at most, on the matched line and,
76" if necessary, on the line before that (h: \@<=), trying to match
77" neither a method reference nor a qualified method invocation.
Aliaksei Budaveid3952e82024-05-11 00:39:31 +030078try
79 syn match javaOperator "\%(\%(::\|\.\)[[:space:]\n]*\)\@80<!\<yield\>"
80 let s:ff.Peek = s:ff.LeftConstant
81catch /\<E59:/
82 call s:ReportOnce(v:exception)
83 syn match javaOperator "\%(\%(::\|\.\)[[:space:]\n]*\)\@<!\<yield\>"
84 let s:ff.Peek = s:ff.RightConstant
85endtry
86
Bram Moolenaar071d4272004-06-13 20:20:40 +000087syn keyword javaType boolean char byte short int long float double
88syn keyword javaType void
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +010089syn keyword javaStatement return
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020090syn keyword javaStorageClass static synchronized transient volatile strictfp serializable
Bram Moolenaar071d4272004-06-13 20:20:40 +000091syn keyword javaExceptions throw try catch finally
92syn keyword javaAssert assert
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020093syn keyword javaMethodDecl throws
94" Differentiate a "MyClass.class" literal from the keyword "class".
Bram Moolenaar071d4272004-06-13 20:20:40 +000095syn match javaTypedef "\.\s*\<class\>"ms=s+1
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +020096syn keyword javaClassDecl enum extends implements interface
97syn match javaClassDecl "\<permits\>\%(\s*(\)\@!"
98syn match javaClassDecl "\<record\>\%(\s*(\)\@!"
Bram Moolenaar071d4272004-06-13 20:20:40 +000099syn match javaClassDecl "^class\>"
100syn match javaClassDecl "[^.]\s*\<class\>"ms=s+1
Aliaksei Budavei40524742024-04-14 19:57:00 +0300101syn match javaAnnotation "@\%(\K\k*\.\)*\K\k*\>"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200102syn match javaClassDecl "@interface\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000103syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite
104syn match javaUserLabelRef "\k\+" contained
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000105syn match javaVarArg "\.\.\."
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +0200106syn keyword javaScopeDecl public protected private
107syn keyword javaConceptKind abstract final
108syn match javaConceptKind "\<non-sealed\>"
109syn match javaConceptKind "\<sealed\>\%(\s*(\)\@!"
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +0100110syn match javaConceptKind "\<default\>\%(\s*\%(:\|->\)\)\@!"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000111
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +0200112" Note that a "module-info" file will be recognised with an arbitrary
113" file extension (or no extension at all) so that more than one such
114" declaration for the same Java module can be maintained for modular
115" testing in a project without attendant confusion for IDEs, with the
116" ".java\=" extension used for a production version and an arbitrary
117" extension used for a testing version.
118let s:module_info_cur_buf = fnamemodify(bufname("%"), ":t") =~ '^module-info\%(\.class\>\)\@!'
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300119lockvar s:module_info_cur_buf
120
121if !(v:version < 704)
122 " Request the new regexp engine for [:upper:] and [:lower:].
123 let [s:ff.Engine, s:ff.UpperCase, s:ff.LowerCase] = repeat([s:ff.LeftConstant], 3)
124else
125 " XXX: \C\<[^a-z0-9]\k*\> rejects "type", but matches "τύπος".
126 " XXX: \C\<[^A-Z0-9]\k*\> rejects "Method", but matches "Μέθοδος".
127 let [s:ff.Engine, s:ff.UpperCase, s:ff.LowerCase] = repeat([s:ff.RightConstant], 3)
128endif
Bram Moolenaar63f32602022-06-09 20:45:54 +0100129
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +0200130" Java modules (since Java 9, for "module-info.java" file).
131if s:module_info_cur_buf
132 syn keyword javaModuleStorageClass module transitive
133 syn keyword javaModuleStmt open requires exports opens uses provides
134 syn keyword javaModuleExternal to with
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200135endif
136
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000137if exists("java_highlight_java_lang_ids")
138 let java_highlight_all=1
139endif
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200140if exists("java_highlight_all") || exists("java_highlight_java") || exists("java_highlight_java_lang")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000141 " java.lang.*
Bram Moolenaar63f32602022-06-09 20:45:54 +0100142 "
143 " The keywords of javaR_JavaLang, javaC_JavaLang, javaE_JavaLang,
144 " and javaX_JavaLang are sub-grouped according to the Java version
145 " of their introduction, and sub-group keywords (that is, class
146 " names) are arranged in alphabetical order, so that future newer
147 " keywords can be pre-sorted and appended without disturbing
148 " the current keyword placement. The below _match_es follow suit.
149
Aliaksei Budavei63d68c22024-03-26 20:12:05 +0300150 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 +0000151 syn cluster javaClasses add=javaR_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200152 hi def link javaR_JavaLang javaR_Java
Bram Moolenaar63f32602022-06-09 20:45:54 +0100153 " Member enumerations:
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300154 exec 'syn match javaC_JavaLang "\%(\<Thread\.\)\@' . s:ff.Peek('7', '') . '<=\<State\>"'
155 exec 'syn match javaC_JavaLang "\%(\<Character\.\)\@' . s:ff.Peek('10', '') . '<=\<UnicodeScript\>"'
156 exec 'syn match javaC_JavaLang "\%(\<ProcessBuilder\.Redirect\.\)\@' . s:ff.Peek('24', '') . '<=\<Type\>"'
157 exec 'syn match javaC_JavaLang "\%(\<StackWalker\.\)\@' . s:ff.Peek('12', '') . '<=\<Option\>"'
158 exec 'syn match javaC_JavaLang "\%(\<System\.Logger\.\)\@' . s:ff.Peek('14', '') . '<=\<Level\>"'
Bram Moolenaar63f32602022-06-09 20:45:54 +0100159 " Member classes:
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300160 exec 'syn match javaC_JavaLang "\%(\<Character\.\)\@' . s:ff.Peek('10', '') . '<=\<Subset\>"'
161 exec 'syn match javaC_JavaLang "\%(\<Character\.\)\@' . s:ff.Peek('10', '') . '<=\<UnicodeBlock\>"'
162 exec 'syn match javaC_JavaLang "\%(\<ProcessBuilder\.\)\@' . s:ff.Peek('15', '') . '<=\<Redirect\>"'
163 exec 'syn match javaC_JavaLang "\%(\<ModuleLayer\.\)\@' . s:ff.Peek('12', '') . '<=\<Controller\>"'
164 exec 'syn match javaC_JavaLang "\%(\<Runtime\.\)\@' . s:ff.Peek('8', '') . '<=\<Version\>"'
165 exec 'syn match javaC_JavaLang "\%(\<System\.\)\@' . s:ff.Peek('7', '') . '<=\<LoggerFinder\>"'
166 exec 'syn match javaC_JavaLang "\%(\<Enum\.\)\@' . s:ff.Peek('5', '') . '<=\<EnumDesc\>"'
Bram Moolenaar63f32602022-06-09 20:45:54 +0100167 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
168 syn match javaC_JavaLang "\<System\>" " See javaDebug.
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +0200169 " As of JDK 21, java.lang.Compiler is no more (deprecated in JDK 9).
Aliaksei Budavei63d68c22024-03-26 20:12:05 +0300170 syn keyword javaLangDeprecated Compiler
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000171 syn cluster javaClasses add=javaC_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200172 hi def link javaC_JavaLang javaC_Java
Bram Moolenaar63f32602022-06-09 20:45:54 +0100173 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 +0000174 syn cluster javaClasses add=javaE_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200175 hi def link javaE_JavaLang javaE_Java
Bram Moolenaar63f32602022-06-09 20:45:54 +0100176 syn keyword javaX_JavaLang ClassNotFoundException CloneNotSupportedException Exception IllegalAccessException InstantiationException InterruptedException NoSuchMethodException Throwable NoSuchFieldException ReflectiveOperationException
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000177 syn cluster javaClasses add=javaX_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200178 hi def link javaX_JavaLang javaX_Java
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000179
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200180 hi def link javaR_Java javaR_
181 hi def link javaC_Java javaC_
182 hi def link javaE_Java javaE_
183 hi def link javaX_Java javaX_
184 hi def link javaX_ javaExceptions
185 hi def link javaR_ javaExceptions
186 hi def link javaE_ javaExceptions
187 hi def link javaC_ javaConstant
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000188
Bram Moolenaar071d4272004-06-13 20:20:40 +0000189 syn keyword javaLangObject clone equals finalize getClass hashCode
190 syn keyword javaLangObject notify notifyAll toString wait
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200191 hi def link javaLangObject javaConstant
Bram Moolenaar071d4272004-06-13 20:20:40 +0000192endif
193
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300194if filereadable(expand("<sfile>:p:h") . "/javaid.vim")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000195 source <sfile>:p:h/javaid.vim
196endif
197
198if exists("java_space_errors")
199 if !exists("java_no_trail_space_error")
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200200 syn match javaSpaceError "\s\+$"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000201 endif
202 if !exists("java_no_tab_space_error")
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200203 syn match javaSpaceError " \+\t"me=e-1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000204 endif
205endif
206
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300207exec 'syn match javaUserLabel "^\s*\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<!\s*:"he=e-1'
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +0100208syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaLabelCastType,javaLabelNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
209syn region javaLabelRegion transparent matchgroup=javaLabel start="\<default\>\%(\s*\%(:\|->\)\)\@=" matchgroup=NONE end=":\|->" oneline
210" Consider grouped _default_ _case_ labels, i.e.
211" case null, default ->
212" case null: default:
213syn keyword javaLabelDefault contained default
214syn keyword javaLabelVarType contained var
215syn keyword javaLabelCastType contained char byte short int
216" Allow for the contingency of the enclosing region not being able to
217" _keep_ its _end_, e.g. case ':':.
218syn region javaLabelWhenClause contained transparent matchgroup=javaLabel start="\<when\>" matchgroup=NONE end=":"me=e-1 end="->"me=e-2 contains=TOP,javaExternal
219syn match javaLabelNumber contained "\<0\>[lL]\@!"
220syn match javaLabelNumber contained "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)\>[lL]\@!"
221hi def link javaLabelDefault javaLabel
222hi def link javaLabelVarType javaOperator
223hi def link javaLabelNumber javaNumber
224hi def link javaLabelCastType javaType
Bram Moolenaar071d4272004-06-13 20:20:40 +0000225
Bram Moolenaar071d4272004-06-13 20:20:40 +0000226" Comments
227syn keyword javaTodo contained TODO FIXME XXX
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300228
Bram Moolenaar071d4272004-06-13 20:20:40 +0000229if exists("java_comment_strings")
230 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 +0300231 syn region javaCommentString contained start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell,javaSpecialError,javaTextBlockError
232 syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000233 syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
234 syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar
235 syn match javaCommentCharacter contained "'[^\\]'"
Aliaksei Budaveia2c65802024-03-09 20:03:11 +0300236 syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber,javaStrTempl
237 syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber,javaStrTempl
Bram Moolenaar071d4272004-06-13 20:20:40 +0000238endif
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300239
Aliaksei Budavei8e59a7b2024-03-25 18:18:28 +0300240syn region javaComment matchgroup=javaCommentStart start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,javaCommentError,javaSpaceError,@Spell
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200241syn match javaCommentStar contained "^\s*\*[^/]"me=e-1
242syn match javaCommentStar contained "^\s*\*$"
Aliaksei Budavei3e72bf12024-03-22 21:32:48 +0300243syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,javaCommentMarkupTag,javaSpaceError,@Spell
Aliaksei Budavei8e59a7b2024-03-25 18:18:28 +0300244syn match javaCommentMarkupTag contained "@\%(end\|highlight\|link\|replace\|start\)\>" nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite
245syn match javaCommentMarkupTagAttr contained "\<region\>" nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300246exec 'syn region javaCommentMarkupTagAttr contained transparent matchgroup=htmlArg start=/\<\%(re\%(gex\|gion\|placement\)\|substring\|t\%(arget\|ype\)\)\%(\s*=\)\@=/ matchgroup=htmlString end=/\%(=\s*\)\@' . s:ff.Peek('80', '') . '<=\%("[^"]\+"\|' . "\x27[^\x27]\\+\x27" . '\|\%([.-]\|\k\)\+\)/ nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite oneline'
Aliaksei Budavei3e72bf12024-03-22 21:32:48 +0300247hi def link javaCommentMarkupTagAttr htmlArg
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200248hi def link javaCommentString javaString
249hi def link javaComment2String javaString
250hi def link javaCommentCharacter javaCharacter
Aliaksei Budavei8e59a7b2024-03-25 18:18:28 +0300251syn match javaCommentError contained "/\*"me=e-1 display
252hi def link javaCommentError javaError
253hi def link javaCommentStart javaComment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000254
Bram Moolenaar071d4272004-06-13 20:20:40 +0000255if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
256 syntax case ignore
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300257
258 " Include HTML syntax coloring for Javadoc comments.
Bram Moolenaar63f32602022-06-09 20:45:54 +0100259 syntax include @javaHtml syntax/html.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000260 unlet b:current_syntax
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300261
262 " HTML enables spell checking for all text that is not in a syntax
263 " item (:syntax spell toplevel); instead, limit spell checking to
264 " items matchable with syntax groups containing the @Spell cluster.
265 try
266 syntax spell default
267 catch /\<E390:/
268 call s:ReportOnce(v:exception)
269 endtry
Bram Moolenaar5c736222010-01-06 20:54:52 +0100270
Aliaksei Budavei8e59a7b2024-03-25 18:18:28 +0300271 syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaDocCodeTag,javaDocSnippetTag,javaTodo,javaCommentError,javaSpaceError,@Spell
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300272 exec 'syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*" matchgroup=javaCommentTitle end="\.$" end="\.[ \t\r]\@=" end="\%(^\s*\**\s*\)\@' . s:ff.Peek('80', '') . '<=@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,javaDocTags,javaDocSeeTag,javaDocCodeTag,javaDocSnippetTag'
Aliaksei Budavei8e59a7b2024-03-25 18:18:28 +0300273 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 +0300274 syn region javaDocTags contained start="{@\%(li\%(teral\|nk\%(plain\)\=\)\|inherit[Dd]oc\|doc[rR]oot\|value\)\>" end="}"
Aliaksei Budavei8e59a7b2024-03-25 18:18:28 +0300275 syn match javaDocTags contained "@\%(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
276 syn match javaDocParam contained "\s\S\+"
277 syn match javaDocTags contained "@\%(version\|author\|return\|deprecated\|serial\%(Field\|Data\)\=\)\>"
278 syn region javaDocSeeTag contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
279 syn match javaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\%(\k\|\.\)*\%(#\k\+\%((\_[^)]*)\)\=\)\=@ contains=@javaHtml extend
Aliaksei Budavei3e72bf12024-03-22 21:32:48 +0300280 syn region javaCodeSkipBlock contained transparent start="{\%(@code\>\)\@!" end="}" contains=javaCodeSkipBlock,javaDocCodeTag
281 syn region javaDocCodeTag contained start="{@code\>" end="}" contains=javaDocCodeTag,javaCodeSkipBlock
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300282 exec 'syn region javaDocSnippetTagAttr contained transparent matchgroup=htmlArg start=/\<\%(class\|file\|id\|lang\|region\)\%(\s*=\)\@=/ matchgroup=htmlString end=/:$/ end=/\%(=\s*\)\@' . s:ff.Peek('80', '') . '<=\%("[^"]\+"\|' . "\x27[^\x27]\\+\x27" . '\|\%([.\\/-]\|\k\)\+\)/ nextgroup=javaDocSnippetTagAttr skipwhite skipnl'
Aliaksei Budavei3e72bf12024-03-22 21:32:48 +0300283 syn region javaSnippetSkipBlock contained transparent start="{\%(@snippet\>\)\@!" end="}" contains=javaSnippetSkipBlock,javaDocSnippetTag,javaCommentMarkupTag
284 syn region javaDocSnippetTag contained start="{@snippet\>" end="}" contains=javaDocSnippetTag,javaSnippetSkipBlock,javaDocSnippetTagAttr,javaCommentMarkupTag
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300285
Bram Moolenaar071d4272004-06-13 20:20:40 +0000286 syntax case match
287endif
288
289" match the special comment /**/
290syn match javaComment "/\*\*/"
291
292" Strings and constants
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200293syn match javaSpecialError contained "\\."
Bram Moolenaar071d4272004-06-13 20:20:40 +0000294syn match javaSpecialCharError contained "[^']"
Aliaksei Budavei100a6652024-03-02 01:11:14 +0300295" Escape Sequences (JLS-17, §3.10.7):
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300296syn match javaSpecialChar contained "\\\%(u\x\x\x\x\|[0-3]\o\o\|\o\o\=\|[bstnfr"'\\]\)"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000297syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300298syn region javaString start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell
299syn match javaTextBlockError +"""\s*"""+
Aliaksei Budaveia2c65802024-03-09 20:03:11 +0300300syn region javaStrTemplEmbExp contained matchgroup=javaStrTempl start="\\{" end="}" contains=TOP
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300301exec 'syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="+ end=+"+ contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,@Spell'
302exec 'syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000303syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
304syn match javaCharacter "'\\''" contains=javaSpecialChar
305syn match javaCharacter "'[^\\]'"
Aliaksei Budavei100a6652024-03-02 01:11:14 +0300306" Integer literals (JLS-17, §3.10.1):
307syn keyword javaNumber 0 0l 0L
308syn match javaNumber "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)[lL]\=\>"
309" Decimal floating-point literals (JLS-17, §3.10.2):
310" Against "\<\d\+\>\.":
311syn match javaNumber "\<\d\%(_*\d\)*\."
312syn match javaNumber "\%(\<\d\%(_*\d\)*\.\%(\d\%(_*\d\)*\)\=\|\.\d\%(_*\d\)*\)\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\=\>"
313syn match javaNumber "\<\d\%(_*\d\)*[eE][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
314syn match javaNumber "\<\d\%(_*\d\)*\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\>"
315" Hexadecimal floating-point literals (JLS-17, §3.10.2):
316syn match javaNumber "\<0[xX]\%(\x\%(_*\x\)*\.\=\|\%(\x\%(_*\x\)*\)\=\.\x\%(_*\x\)*\)[pP][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000317
Aliaksei Budavei100a6652024-03-02 01:11:14 +0300318" Unicode characters
319syn match javaSpecial "\\u\x\x\x\x"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000320
Aliaksei Budaveia4c085a2024-04-24 21:04:25 +0200321" Method declarations (JLS-17, §8.4.3, §8.4.4, §9.4).
Bram Moolenaar071d4272004-06-13 20:20:40 +0000322if exists("java_highlight_functions")
Aliaksei Budaveia4c085a2024-04-24 21:04:25 +0200323 syn cluster javaFuncParams contains=javaAnnotation,@javaClasses,javaType,javaVarArg,javaComment,javaLineComment
324
Aliaksei Budaveic4d0c8c2024-04-29 21:24:35 +0300325 if java_highlight_functions =~# '^indent[1-8]\=$'
326 let s:last = java_highlight_functions[-1 :]
327 let s:indent = s:last != 't' ? repeat("\x20", s:last) : "\t"
Aliaksei Budaveia4c085a2024-04-24 21:04:25 +0200328 syn cluster javaFuncParams add=javaScopeDecl,javaConceptKind,javaStorageClass,javaExternal
Aliaksei Budaveic4d0c8c2024-04-29 21:24:35 +0300329 " Try to not match other type members, initialiser blocks, enum
330 " constants (JLS-17, §8.9.1), and constructors (JLS-17, §8.1.7):
331 " at any _conventional_ indentation, skip over all fields with
332 " "[^=]*", all records with "\<record\s", and let the "*Skip*"
333 " definitions take care of constructor declarations and enum
334 " constants (with no support for @Foo(value = "bar")).
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300335 exec 'syn region javaFuncDef start=+^' . s:indent . '\%(<[^>]\+>\+\s\+\|\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)\+\)\=\%(\<\K\k*\>\.\)*\K\k*\>[^=]*\%(\<record\)\@' . s:ff.Peek('6', '') . '<!\s\K\k*\s*(+ end=+)+ contains=@javaFuncParams'
Aliaksei Budaveic4d0c8c2024-04-29 21:24:35 +0300336 " As long as package-private constructors cannot be matched with
337 " javaFuncDef, do not look with javaConstructorSkipDeclarator for
338 " them.
339 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'
340 exec 'syn match javaEnumSkipArgumentativeConstant transparent +^' . s:indent . '\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\K\k*\s*\ze(+ contains=javaAnnotation'
341 unlet s:indent s:last
Bram Moolenaar071d4272004-06-13 20:20:40 +0000342 else
Aliaksei Budavei40524742024-04-14 19:57:00 +0300343 " This is the "style" variant (:help ft-java-syntax).
Aliaksei Budaveia4c085a2024-04-24 21:04:25 +0200344 syn cluster javaFuncParams add=javaScopeDecl,javaConceptKind,javaStorageClass,javaExternal
345
346 " Match arbitrarily indented camelCasedName method declarations.
347 " Match: [@ɐ] [abstract] [<α, β>] Τʬ[<γ>][[][]] μʭʭ(/* ... */);
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300348 exec 'syn region javaFuncDef start=/' . s:ff.Engine('\%#=2', '') . '^\s\+\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(\%(abstract\|default\)\s\+\|\%(\%(final\|\%(native\|strictfp\)\|s\%(tatic\|ynchronized\)\)\s\+\)*\)\=\%(<.*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\s\+\)\=\%(void\|\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\|\%(\<\K\k*\>\.\)*\<' . s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\>\%(<[^(){}]*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\)\=\)\%(\[\]\)*\)\s\+\<' . s:ff.LowerCase('[$_[:lower:]]', '[^A-Z0-9]') . '\k*\>\s*(/ end=/)/ skip=/\/\*.\{-}\*\/\|\/\/.*$/ contains=@javaFuncParams'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000349 endif
Aliaksei Budavei40524742024-04-14 19:57:00 +0300350
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300351 exec 'syn match javaLambdaDef "\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<!\s*->"'
352 syn match javaBraces "[{}]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000353endif
354
355if exists("java_highlight_debug")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000356 " Strings and constants
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300357 syn match javaDebugSpecial contained "\\\%(u\x\x\x\x\|[0-3]\o\o\|\o\o\=\|[bstnfr"'\\]\)"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000358 syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300359 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 +0300360 " The highlight groups of java{StrTempl,Debug{,Paren,StrTempl}}\,
361 " share one colour by default. Do not conflate unrelated parens.
362 syn region javaDebugStrTemplEmbExp contained matchgroup=javaDebugStrTempl start="\\{" end="}" contains=javaComment,javaLineComment,javaDebug\%(Paren\)\@!.*
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300363 exec 'syn region javaDebugStrTempl contained start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="+ end=+"+ contains=javaDebugStrTemplEmbExp,javaDebugSpecial'
364 exec 'syn region javaDebugStrTempl contained start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaDebugStrTemplEmbExp,javaDebugSpecial,javaDebugTextBlockError'
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300365 syn match javaDebugTextBlockError contained +"""\s*"""+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000366 syn match javaDebugCharacter contained "'[^\\]'"
367 syn match javaDebugSpecialCharacter contained "'\\.'"
368 syn match javaDebugSpecialCharacter contained "'\\''"
Aliaksei Budavei100a6652024-03-02 01:11:14 +0300369 syn keyword javaDebugNumber contained 0 0l 0L
Aliaksei Budaveib3030b62024-03-03 17:51:01 +0300370 syn match javaDebugNumber contained "\<\d\%(_*\d\)*\."
Aliaksei Budavei100a6652024-03-02 01:11:14 +0300371 syn match javaDebugNumber contained "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)[lL]\=\>"
372 syn match javaDebugNumber contained "\%(\<\d\%(_*\d\)*\.\%(\d\%(_*\d\)*\)\=\|\.\d\%(_*\d\)*\)\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\=\>"
373 syn match javaDebugNumber contained "\<\d\%(_*\d\)*[eE][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
374 syn match javaDebugNumber contained "\<\d\%(_*\d\)*\%([eE][-+]\=\d\%(_*\d\)*\)\=[fFdD]\>"
375 syn match javaDebugNumber contained "\<0[xX]\%(\x\%(_*\x\)*\.\=\|\%(\x\%(_*\x\)*\)\=\.\x\%(_*\x\)*\)[pP][-+]\=\d\%(_*\d\)*[fFdD]\=\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000376 syn keyword javaDebugBoolean contained true false
377 syn keyword javaDebugType contained null this super
378 syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
379
Aliaksei Budavei40524742024-04-14 19:57:00 +0300380 " To make this work, define the highlighting for these groups.
381 syn match javaDebug "\<System\.\%(out\|err\)\.print\%(ln\)\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
382" FIXME: What API does "p" belong to?
383" syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
384 syn match javaDebug "\<\K\k*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
385" FIXME: What API do "trace*" belong to?
386" syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar071d4272004-06-13 20:20:40 +0000387
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200388 hi def link javaDebug Debug
389 hi def link javaDebugString DebugString
Aliaksei Budaveia2c65802024-03-09 20:03:11 +0300390 hi def link javaDebugStrTempl Macro
Aliaksei Budavei06bdac12024-05-10 15:49:06 +0300391 hi def link javaDebugTextBlockError Error
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200392 hi def link javaDebugType DebugType
393 hi def link javaDebugBoolean DebugBoolean
394 hi def link javaDebugNumber Debug
395 hi def link javaDebugSpecial DebugSpecial
396 hi def link javaDebugSpecialCharacter DebugSpecial
397 hi def link javaDebugCharacter DebugString
398 hi def link javaDebugParen Debug
Bram Moolenaar071d4272004-06-13 20:20:40 +0000399
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200400 hi def link DebugString String
401 hi def link DebugSpecial Special
402 hi def link DebugBoolean Boolean
403 hi def link DebugType Type
Bram Moolenaar071d4272004-06-13 20:20:40 +0000404endif
405
406if exists("java_mark_braces_in_parens_as_errors")
407 syn match javaInParen contained "[{}]"
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200408 hi def link javaInParen javaError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000409endif
410
411" catch errors caused by wrong parenthesis
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100412syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000413syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
414syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200415syn match javaParenError ")"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000416" catch errors caused by wrong square parenthesis
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100417syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000418syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
419syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200420syn match javaParenError "\]"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000421
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200422hi def link javaParenError javaError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000423
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100424if exists("java_highlight_functions")
Aliaksei Budavei40524742024-04-14 19:57:00 +0300425 " Make ()-matching definitions after the parenthesis error catcher.
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300426 exec 'syn match javaLambdaDef "\k\@' . s:ff.Peek('4', '') . '<!(\%(\k\|[[:space:]<>?\[\]@,.]\)*)\s*->"'
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100427endif
428
Aliaksei Budavei06bdac12024-05-10 15:49:06 +0300429" The @javaTop cluster comprises non-contained Java syntax groups.
430" Note that the syntax file "aidl.vim" relies on its availability.
431syn cluster javaTop contains=TOP,javaDocComment,javaFold,javaParenError,javaParenT
432
Bram Moolenaar071d4272004-06-13 20:20:40 +0000433if !exists("java_minlines")
434 let java_minlines = 10
435endif
Aliaksei Budavei8e59a7b2024-03-25 18:18:28 +0300436
437" Note that variations of a /*/ balanced comment, e.g., /*/*/, /*//*/,
438" /* /*/, /* /*/, etc., may have their rightmost /*/ part accepted
439" as a comment start by ':syntax sync ccomment'; consider alternatives
440" to make synchronisation start further towards file's beginning by
441" bumping up g:java_minlines or issuing ':syntax sync fromstart' or
442" preferring &foldmethod set to 'syntax'.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000443exec "syn sync ccomment javaComment minlines=" . java_minlines
444
445" The default highlighting.
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200446hi def link javaLambdaDef Function
447hi def link javaFuncDef Function
448hi def link javaVarArg Function
449hi def link javaBraces Function
450hi def link javaBranch Conditional
451hi def link javaUserLabelRef javaUserLabel
452hi def link javaLabel Label
453hi def link javaUserLabel Label
454hi def link javaConditional Conditional
455hi def link javaRepeat Repeat
456hi def link javaExceptions Exception
457hi def link javaAssert Statement
458hi def link javaStorageClass StorageClass
459hi def link javaMethodDecl javaStorageClass
460hi def link javaClassDecl javaStorageClass
461hi def link javaScopeDecl javaStorageClass
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +0100462hi def link javaConceptKind NonText
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200463
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200464hi def link javaBoolean Boolean
465hi def link javaSpecial Special
466hi def link javaSpecialError Error
467hi def link javaSpecialCharError Error
468hi def link javaString String
Aliaksei Budaveia2c65802024-03-09 20:03:11 +0300469hi def link javaStrTempl Macro
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200470hi def link javaCharacter Character
471hi def link javaSpecialChar SpecialChar
472hi def link javaNumber Number
473hi def link javaError Error
Aliaksei Budavei06bdac12024-05-10 15:49:06 +0300474hi def link javaTextBlockError Error
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200475hi def link javaStatement Statement
476hi def link javaOperator Operator
477hi def link javaComment Comment
478hi def link javaDocComment Comment
479hi def link javaLineComment Comment
480hi def link javaConstant Constant
481hi def link javaTypedef Typedef
482hi def link javaTodo Todo
483hi def link javaAnnotation PreProc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000484
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200485hi def link javaCommentTitle SpecialComment
486hi def link javaDocTags Special
Aliaksei Budavei3e72bf12024-03-22 21:32:48 +0300487hi def link javaDocCodeTag Special
488hi def link javaDocSnippetTag Special
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200489hi def link javaDocParam Function
490hi def link javaDocSeeTagParam Function
491hi def link javaCommentStar javaComment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000492
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200493hi def link javaType Type
494hi def link javaExternal Include
Bram Moolenaar071d4272004-06-13 20:20:40 +0000495
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200496hi def link htmlComment Special
497hi def link htmlCommentPart Special
Aliaksei Budavei3e72bf12024-03-22 21:32:48 +0300498hi def link htmlArg Type
499hi def link htmlString String
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200500hi def link javaSpaceError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000501
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +0200502if s:module_info_cur_buf
503 hi def link javaModuleStorageClass StorageClass
504 hi def link javaModuleStmt Statement
505 hi def link javaModuleExternal Include
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200506endif
507
Bram Moolenaar071d4272004-06-13 20:20:40 +0000508let b:current_syntax = "java"
509
510if main_syntax == 'java'
511 unlet main_syntax
512endif
513
Aliaksei Budavei5ccdcc42024-04-04 21:51:18 +0200514let b:spell_options = "contained"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200515let &cpo = s:cpo_save
Aliaksei Budaveid3952e82024-05-11 00:39:31 +0300516unlet s:module_info_cur_buf s:ff s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000517
Aliaksei Budavei06bdac12024-05-10 15:49:06 +0300518" vim: sw=2 ts=8 noet sta