blob: 00d607194462cd98e7b25df42242a19865417ca5 [file] [log] [blame]
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +02001" Vim syntax file
2" Language: Java
Bram Moolenaar00a927d2010-05-14 23:24:24 +02003" Maintainer: Claudio Fleiner <claudio@fleiner.com>
Bram Moolenaar91f84f62018-07-29 15:07:52 +02004" URL: https://github.com/fleiner/vim/blob/master/runtime/syntax/java.vim
Bram Moolenaar63f32602022-06-09 20:45:54 +01005" Last Change: 2022 Jun 08
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
7" Please check :help java.vim for comments on some of the options available.
8
Bram Moolenaar89bcfda2016-08-30 23:26:57 +02009" quit when a syntax file was already loaded
Bram Moolenaar071d4272004-06-13 20:20:40 +000010if !exists("main_syntax")
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020011 if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000012 finish
13 endif
14 " we define it here so that included files can test for it
15 let main_syntax='java'
Bram Moolenaar5c736222010-01-06 20:54:52 +010016 syn region javaFold start="{" end="}" transparent fold
Bram Moolenaar071d4272004-06-13 20:20:40 +000017endif
18
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020019let s:cpo_save = &cpo
20set cpo&vim
21
Bram Moolenaar071d4272004-06-13 20:20:40 +000022" some characters that cannot be in a java program (outside a string)
23syn match javaError "[\\@`]"
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +010024syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020025
Bram Moolenaar071d4272004-06-13 20:20:40 +000026" use separate name so that it can be deleted in javacc.vim
27syn match javaError2 "#\|=<"
Bram Moolenaarf37506f2016-08-31 22:22:10 +020028hi def link javaError2 javaError
Bram Moolenaar071d4272004-06-13 20:20:40 +000029
Bram Moolenaar071d4272004-06-13 20:20:40 +000030" keyword definitions
31syn keyword javaExternal native package
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000032syn match javaExternal "\<import\>\(\s\+static\>\)\?"
Bram Moolenaar071d4272004-06-13 20:20:40 +000033syn keyword javaError goto const
34syn keyword javaConditional if else switch
35syn keyword javaRepeat while for do
36syn keyword javaBoolean true false
37syn keyword javaConstant null
38syn keyword javaTypedef this super
Bram Moolenaar91f84f62018-07-29 15:07:52 +020039syn keyword javaOperator var new instanceof
Bram Moolenaar071d4272004-06-13 20:20:40 +000040syn keyword javaType boolean char byte short int long float double
41syn keyword javaType void
42syn keyword javaStatement return
43syn keyword javaStorageClass static synchronized transient volatile final strictfp serializable
44syn keyword javaExceptions throw try catch finally
45syn keyword javaAssert assert
46syn keyword javaMethodDecl synchronized throws
47syn keyword javaClassDecl extends implements interface
48" to differentiate the keyword class from MyClass.class we use a match here
49syn match javaTypedef "\.\s*\<class\>"ms=s+1
50syn keyword javaClassDecl enum
51syn match javaClassDecl "^class\>"
52syn match javaClassDecl "[^.]\s*\<class\>"ms=s+1
Bram Moolenaar91f84f62018-07-29 15:07:52 +020053syn match javaAnnotation "@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>" contains=javaString
Bram Moolenaar00a927d2010-05-14 23:24:24 +020054syn match javaClassDecl "@interface\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000055syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite
56syn match javaUserLabelRef "\k\+" contained
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000057syn match javaVarArg "\.\.\."
Bram Moolenaar071d4272004-06-13 20:20:40 +000058syn keyword javaScopeDecl public protected private abstract
59
Bram Moolenaar63f32602022-06-09 20:45:54 +010060function s:isModuleInfoDeclarationCurrentBuffer() abort
61 return fnamemodify(bufname("%"), ":t") =~ '^module-info\%(\.class\>\)\@!'
62endfunction
63
Bram Moolenaar91f84f62018-07-29 15:07:52 +020064" Java Modules(Since Java 9, for "module-info.java" file)
Bram Moolenaar63f32602022-06-09 20:45:54 +010065if s:isModuleInfoDeclarationCurrentBuffer()
Bram Moolenaar91f84f62018-07-29 15:07:52 +020066 syn keyword javaModuleStorageClass module transitive
67 syn keyword javaModuleStmt open requires exports opens uses provides
68 syn keyword javaModuleExternal to with
69 syn cluster javaTop add=javaModuleStorageClass,javaModuleStmt,javaModuleExternal
70endif
71
Bram Moolenaar8ada17c2006-01-19 22:16:24 +000072if exists("java_highlight_java_lang_ids")
73 let java_highlight_all=1
74endif
Bram Moolenaar91f84f62018-07-29 15:07:52 +020075if exists("java_highlight_all") || exists("java_highlight_java") || exists("java_highlight_java_lang")
Bram Moolenaar071d4272004-06-13 20:20:40 +000076 " java.lang.*
Bram Moolenaar63f32602022-06-09 20:45:54 +010077 "
78 " The keywords of javaR_JavaLang, javaC_JavaLang, javaE_JavaLang,
79 " and javaX_JavaLang are sub-grouped according to the Java version
80 " of their introduction, and sub-group keywords (that is, class
81 " names) are arranged in alphabetical order, so that future newer
82 " keywords can be pre-sorted and appended without disturbing
83 " the current keyword placement. The below _match_es follow suit.
84
85 syn keyword javaR_JavaLang ArithmeticException ArrayIndexOutOfBoundsException ArrayStoreException ClassCastException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException IndexOutOfBoundsException NegativeArraySizeException NullPointerException NumberFormatException RuntimeException SecurityException StringIndexOutOfBoundsException IllegalStateException UnsupportedOperationException EnumConstantNotPresentException TypeNotPresentException IllegalCallerException LayerInstantiationException
Bram Moolenaar8ada17c2006-01-19 22:16:24 +000086 syn cluster javaTop add=javaR_JavaLang
87 syn cluster javaClasses add=javaR_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +020088 hi def link javaR_JavaLang javaR_Java
Bram Moolenaar63f32602022-06-09 20:45:54 +010089 " Member enumerations:
90 syn match javaC_JavaLang "\%(\<Thread\.\)\@<=\<State\>"
91 syn match javaC_JavaLang "\%(\<Character\.\)\@<=\<UnicodeScript\>"
92 syn match javaC_JavaLang "\%(\<ProcessBuilder\.Redirect\.\)\@<=\<Type\>"
93 syn match javaC_JavaLang "\%(\<StackWalker\.\)\@<=\<Option\>"
94 syn match javaC_JavaLang "\%(\<System\.Logger\.\)\@<=\<Level\>"
95 " Member classes:
96 syn match javaC_JavaLang "\%(\<Character\.\)\@<=\<Subset\>"
97 syn match javaC_JavaLang "\%(\<Character\.\)\@<=\<UnicodeBlock\>"
98 syn match javaC_JavaLang "\%(\<ProcessBuilder\.\)\@<=\<Redirect\>"
99 syn match javaC_JavaLang "\%(\<ModuleLayer\.\)\@<=\<Controller\>"
100 syn match javaC_JavaLang "\%(\<Runtime\.\)\@<=\<Version\>"
101 syn match javaC_JavaLang "\%(\<System\.\)\@<=\<LoggerFinder\>"
102 syn match javaC_JavaLang "\%(\<Enum\.\)\@<=\<EnumDesc\>"
103 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
104 syn match javaC_JavaLang "\<System\>" " See javaDebug.
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000105 syn cluster javaTop add=javaC_JavaLang
106 syn cluster javaClasses add=javaC_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200107 hi def link javaC_JavaLang javaC_Java
Bram Moolenaar63f32602022-06-09 20:45:54 +0100108 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 +0000109 syn cluster javaTop add=javaE_JavaLang
110 syn cluster javaClasses add=javaE_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200111 hi def link javaE_JavaLang javaE_Java
Bram Moolenaar63f32602022-06-09 20:45:54 +0100112 syn keyword javaX_JavaLang ClassNotFoundException CloneNotSupportedException Exception IllegalAccessException InstantiationException InterruptedException NoSuchMethodException Throwable NoSuchFieldException ReflectiveOperationException
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000113 syn cluster javaTop add=javaX_JavaLang
114 syn cluster javaClasses add=javaX_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200115 hi def link javaX_JavaLang javaX_Java
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000116
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200117 hi def link javaR_Java javaR_
118 hi def link javaC_Java javaC_
119 hi def link javaE_Java javaE_
120 hi def link javaX_Java javaX_
121 hi def link javaX_ javaExceptions
122 hi def link javaR_ javaExceptions
123 hi def link javaE_ javaExceptions
124 hi def link javaC_ javaConstant
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000125
Bram Moolenaar071d4272004-06-13 20:20:40 +0000126 syn keyword javaLangObject clone equals finalize getClass hashCode
127 syn keyword javaLangObject notify notifyAll toString wait
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200128 hi def link javaLangObject javaConstant
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000129 syn cluster javaTop add=javaLangObject
Bram Moolenaar071d4272004-06-13 20:20:40 +0000130endif
131
132if filereadable(expand("<sfile>:p:h")."/javaid.vim")
133 source <sfile>:p:h/javaid.vim
134endif
135
136if exists("java_space_errors")
137 if !exists("java_no_trail_space_error")
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200138 syn match javaSpaceError "\s\+$"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139 endif
140 if !exists("java_no_tab_space_error")
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200141 syn match javaSpaceError " \+\t"me=e-1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000142 endif
143endif
144
Bram Moolenaar63f32602022-06-09 20:45:54 +0100145syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" end="->" matchgroup=NONE end=":" contains=javaNumber,javaCharacter,javaString
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200146syn match javaUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
Bram Moolenaar071d4272004-06-13 20:20:40 +0000147syn keyword javaLabel default
148
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100149" highlighting C++ keywords as errors removed, too many people find it
150" annoying. Was: if !exists("java_allow_cpp_keywords")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151
152" The following cluster contains all java groups except the contained ones
Bram Moolenaar63f32602022-06-09 20:45:54 +0100153syn cluster javaTop add=javaExternal,javaError,javaBranch,javaLabelRegion,javaLabel,javaConditional,javaRepeat,javaBoolean,javaConstant,javaTypedef,javaOperator,javaType,javaStatement,javaStorageClass,javaAssert,javaExceptions,javaMethodDecl,javaClassDecl,javaScopeDecl,javaError2,javaUserLabel,javaLangObject,javaAnnotation,javaVarArg
Bram Moolenaar071d4272004-06-13 20:20:40 +0000154
155
156" Comments
157syn keyword javaTodo contained TODO FIXME XXX
158if exists("java_comment_strings")
159 syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200160 syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000161 syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
162 syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar
163 syn match javaCommentCharacter contained "'[^\\]'"
164 syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
165 syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
166endif
167syn region javaComment start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200168syn match javaCommentStar contained "^\s*\*[^/]"me=e-1
169syn match javaCommentStar contained "^\s*\*$"
170syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200171hi def link javaCommentString javaString
172hi def link javaComment2String javaString
173hi def link javaCommentCharacter javaCharacter
Bram Moolenaar071d4272004-06-13 20:20:40 +0000174
175syn cluster javaTop add=javaComment,javaLineComment
176
177if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
178 syntax case ignore
179 " syntax coloring for javadoc comments (HTML)
Bram Moolenaar63f32602022-06-09 20:45:54 +0100180 syntax include @javaHtml syntax/html.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000181 unlet b:current_syntax
Bram Moolenaar5c736222010-01-06 20:54:52 +0100182 " HTML enables spell checking for all text that is not in a syntax item. This
183 " is wrong for Java (all identifiers would be spell-checked), so it's undone
184 " here.
185 syntax spell default
186
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200187 syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
188 syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*" matchgroup=javaCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,@Spell,javaDocTags,javaDocSeeTag
Bram Moolenaar071d4272004-06-13 20:20:40 +0000189
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200190 syn region javaDocTags contained start="{@\(code\|link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200191 syn match javaDocTags contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
192 syn match javaDocParam contained "\s\S\+"
193 syn match javaDocTags contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
194 syn region javaDocSeeTag contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000195 syn match javaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000196 syntax case match
197endif
198
199" match the special comment /**/
200syn match javaComment "/\*\*/"
201
202" Strings and constants
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200203syn match javaSpecialError contained "\\."
Bram Moolenaar071d4272004-06-13 20:20:40 +0000204syn match javaSpecialCharError contained "[^']"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200205syn match javaSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000206syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
207" next line disabled, it can cause a crash for a long line
208"syn match javaStringError +"\([^"\\]\|\\.\)*$+
209syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
210syn match javaCharacter "'\\''" contains=javaSpecialChar
211syn match javaCharacter "'[^\\]'"
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100212syn match javaNumber "\<\(0[bB][0-1]\+\|0[0-7]*\|0[xX]\x\+\|\d\(\d\|_\d\)*\)[lL]\=\>"
213syn match javaNumber "\(\<\d\(\d\|_\d\)*\.\(\d\(\d\|_\d\)*\)\=\|\.\d\(\d\|_\d\)*\)\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\="
214syn match javaNumber "\<\d\(\d\|_\d\)*[eE][-+]\=\d\(\d\|_\d\)*[fFdD]\=\>"
215syn match javaNumber "\<\d\(\d\|_\d\)*\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000216
217" unicode characters
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200218syn match javaSpecial "\\u\d\{4\}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000219
220syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
221
222if exists("java_highlight_functions")
223 if java_highlight_functions == "indent"
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100224 syn match javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
225 syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
226 syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
227 syn region javaFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
Bram Moolenaar071d4272004-06-13 20:20:40 +0000228 else
229 " This line catches method declarations at any indentation>0, but it assumes
230 " two things:
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200231 " 1. class names are always capitalized (ie: Button)
232 " 2. method names are never capitalized (except constructors, of course)
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100233 "syn region javaFuncDef start=+^\s\+\(\(public\|protected\|private\|static\|abstract\|final\|native\|synchronized\)\s\+\)*\(\(void\|boolean\|char\|byte\|short\|int\|long\|float\|double\|\([A-Za-z_][A-Za-z0-9_$]*\.\)*[A-Z][A-Za-z0-9_$]*\)\(<[^>]*>\)\=\(\[\]\)*\s\+[a-z][A-Za-z0-9_$]*\|[A-Z][A-Za-z0-9_$]*\)\s*([^0-9]+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,javaComment,javaLineComment,@javaClasses
234 syn region javaFuncDef start=+^\s\+\(\(public\|protected\|private\|static\|abstract\|final\|native\|synchronized\)\s\+\)*\(<.*>\s\+\)\?\(\(void\|boolean\|char\|byte\|short\|int\|long\|float\|double\|\([A-Za-z_][A-Za-z0-9_$]*\.\)*[A-Z][A-Za-z0-9_$]*\)\(<[^(){}]*>\)\=\(\[\]\)*\s\+[a-z][A-Za-z0-9_$]*\|[A-Z][A-Za-z0-9_$]*\)\s*(+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,javaComment,javaLineComment,@javaClasses,javaAnnotation
Bram Moolenaar071d4272004-06-13 20:20:40 +0000235 endif
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100236 syn match javaLambdaDef "[a-zA-Z_][a-zA-Z0-9_]*\s*->"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000237 syn match javaBraces "[{}]"
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100238 syn cluster javaTop add=javaFuncDef,javaBraces,javaLambdaDef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000239endif
240
241if exists("java_highlight_debug")
242
243 " Strings and constants
244 syn match javaDebugSpecial contained "\\\d\d\d\|\\."
245 syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200246 syn match javaDebugStringError +"\([^"\\]\|\\.\)*$+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000247 syn match javaDebugCharacter contained "'[^\\]'"
248 syn match javaDebugSpecialCharacter contained "'\\.'"
249 syn match javaDebugSpecialCharacter contained "'\\''"
250 syn match javaDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
251 syn match javaDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
252 syn match javaDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
253 syn match javaDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
254 syn keyword javaDebugBoolean contained true false
255 syn keyword javaDebugType contained null this super
256 syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
257
258 " to make this work you must define the highlighting for these groups
259 syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000260 syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar071d4272004-06-13 20:20:40 +0000261 syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
262 syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
263
264 syn cluster javaTop add=javaDebug
265
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200266 hi def link javaDebug Debug
267 hi def link javaDebugString DebugString
268 hi def link javaDebugStringError javaError
269 hi def link javaDebugType DebugType
270 hi def link javaDebugBoolean DebugBoolean
271 hi def link javaDebugNumber Debug
272 hi def link javaDebugSpecial DebugSpecial
273 hi def link javaDebugSpecialCharacter DebugSpecial
274 hi def link javaDebugCharacter DebugString
275 hi def link javaDebugParen Debug
Bram Moolenaar071d4272004-06-13 20:20:40 +0000276
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200277 hi def link DebugString String
278 hi def link DebugSpecial Special
279 hi def link DebugBoolean Boolean
280 hi def link DebugType Type
Bram Moolenaar071d4272004-06-13 20:20:40 +0000281endif
282
283if exists("java_mark_braces_in_parens_as_errors")
284 syn match javaInParen contained "[{}]"
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200285 hi def link javaInParen javaError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000286 syn cluster javaTop add=javaInParen
287endif
288
289" catch errors caused by wrong parenthesis
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100290syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000291syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
292syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200293syn match javaParenError ")"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000294" catch errors caused by wrong square parenthesis
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100295syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000296syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
297syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200298syn match javaParenError "\]"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000299
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200300hi def link javaParenError javaError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000301
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100302if exists("java_highlight_functions")
303 syn match javaLambdaDef "([a-zA-Z0-9_<>\[\], \t]*)\s*->"
304 " needs to be defined after the parenthesis error catcher to work
305endif
306
Bram Moolenaar071d4272004-06-13 20:20:40 +0000307if !exists("java_minlines")
308 let java_minlines = 10
309endif
310exec "syn sync ccomment javaComment minlines=" . java_minlines
311
312" The default highlighting.
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200313hi def link javaLambdaDef Function
314hi def link javaFuncDef Function
315hi def link javaVarArg Function
316hi def link javaBraces Function
317hi def link javaBranch Conditional
318hi def link javaUserLabelRef javaUserLabel
319hi def link javaLabel Label
320hi def link javaUserLabel Label
321hi def link javaConditional Conditional
322hi def link javaRepeat Repeat
323hi def link javaExceptions Exception
324hi def link javaAssert Statement
325hi def link javaStorageClass StorageClass
326hi def link javaMethodDecl javaStorageClass
327hi def link javaClassDecl javaStorageClass
328hi def link javaScopeDecl javaStorageClass
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200329
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200330hi def link javaBoolean Boolean
331hi def link javaSpecial Special
332hi def link javaSpecialError Error
333hi def link javaSpecialCharError Error
334hi def link javaString String
335hi def link javaCharacter Character
336hi def link javaSpecialChar SpecialChar
337hi def link javaNumber Number
338hi def link javaError Error
339hi def link javaStringError Error
340hi def link javaStatement Statement
341hi def link javaOperator Operator
342hi def link javaComment Comment
343hi def link javaDocComment Comment
344hi def link javaLineComment Comment
345hi def link javaConstant Constant
346hi def link javaTypedef Typedef
347hi def link javaTodo Todo
348hi def link javaAnnotation PreProc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000349
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200350hi def link javaCommentTitle SpecialComment
351hi def link javaDocTags Special
352hi def link javaDocParam Function
353hi def link javaDocSeeTagParam Function
354hi def link javaCommentStar javaComment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000355
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200356hi def link javaType Type
357hi def link javaExternal Include
Bram Moolenaar071d4272004-06-13 20:20:40 +0000358
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200359hi def link htmlComment Special
360hi def link htmlCommentPart Special
361hi def link javaSpaceError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000362
Bram Moolenaar63f32602022-06-09 20:45:54 +0100363if s:isModuleInfoDeclarationCurrentBuffer()
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200364 hi def link javaModuleStorageClass StorageClass
365 hi def link javaModuleStmt Statement
366 hi def link javaModuleExternal Include
367endif
368
Bram Moolenaar071d4272004-06-13 20:20:40 +0000369let b:current_syntax = "java"
370
371if main_syntax == 'java'
372 unlet main_syntax
373endif
374
Bram Moolenaar63f32602022-06-09 20:45:54 +0100375delfunction! s:isModuleInfoDeclarationCurrentBuffer
Bram Moolenaar071d4272004-06-13 20:20:40 +0000376let b:spell_options="contained"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200377let &cpo = s:cpo_save
378unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000379
380" vim: ts=8