blob: 18e4532d289c0a4ccf69b630f1cec98c72898b80 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: Java
3" Maintainer: Claudio Fleiner <claudio@fleiner.com>
4" URL: http://www.fleiner.com/vim/syntax/java.vim
Bram Moolenaar5c736222010-01-06 20:54:52 +01005" Last Change: 2009 Mar 14
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
7" Please check :help java.vim for comments on some of the options available.
8
9" Quit when a syntax file was already loaded
10if !exists("main_syntax")
11 if version < 600
12 syntax clear
13 elseif exists("b:current_syntax")
14 finish
15 endif
16 " we define it here so that included files can test for it
17 let main_syntax='java'
Bram Moolenaar5c736222010-01-06 20:54:52 +010018 syn region javaFold start="{" end="}" transparent fold
Bram Moolenaar071d4272004-06-13 20:20:40 +000019endif
20
21" don't use standard HiLink, it will not work with included syntax files
22if version < 508
23 command! -nargs=+ JavaHiLink hi link <args>
24else
25 command! -nargs=+ JavaHiLink hi def link <args>
26endif
27
28" some characters that cannot be in a java program (outside a string)
29syn match javaError "[\\@`]"
30syn match javaError "<<<\|\.\.\|=>\|<>\|||=\|&&=\|[^-]->\|\*\/"
31syn match javaOK "\.\.\."
32
33" use separate name so that it can be deleted in javacc.vim
34syn match javaError2 "#\|=<"
35JavaHiLink javaError2 javaError
36
37
38
39" keyword definitions
40syn keyword javaExternal native package
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000041syn match javaExternal "\<import\>\(\s\+static\>\)\?"
Bram Moolenaar071d4272004-06-13 20:20:40 +000042syn keyword javaError goto const
43syn keyword javaConditional if else switch
44syn keyword javaRepeat while for do
45syn keyword javaBoolean true false
46syn keyword javaConstant null
47syn keyword javaTypedef this super
48syn keyword javaOperator new instanceof
49syn keyword javaType boolean char byte short int long float double
50syn keyword javaType void
51syn keyword javaStatement return
52syn keyword javaStorageClass static synchronized transient volatile final strictfp serializable
53syn keyword javaExceptions throw try catch finally
54syn keyword javaAssert assert
55syn keyword javaMethodDecl synchronized throws
56syn keyword javaClassDecl extends implements interface
57" to differentiate the keyword class from MyClass.class we use a match here
58syn match javaTypedef "\.\s*\<class\>"ms=s+1
59syn keyword javaClassDecl enum
60syn match javaClassDecl "^class\>"
61syn match javaClassDecl "[^.]\s*\<class\>"ms=s+1
Bram Moolenaar5c736222010-01-06 20:54:52 +010062syn match javaAnnotation "@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>"
Bram Moolenaara5792f52005-11-23 21:25:05 +000063syn match javaClassDecl "@interface\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000064syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite
65syn match javaUserLabelRef "\k\+" contained
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000066syn match javaVarArg "\.\.\."
Bram Moolenaar071d4272004-06-13 20:20:40 +000067syn keyword javaScopeDecl public protected private abstract
68
Bram Moolenaar8ada17c2006-01-19 22:16:24 +000069if exists("java_highlight_java_lang_ids")
70 let java_highlight_all=1
71endif
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000072if exists("java_highlight_all") || exists("java_highlight_java") || exists("java_highlight_java_lang")
Bram Moolenaar071d4272004-06-13 20:20:40 +000073 " java.lang.*
74 syn match javaLangClass "\<System\>"
Bram Moolenaar8ada17c2006-01-19 22:16:24 +000075 syn keyword javaR_JavaLang NegativeArraySizeException ArrayStoreException IllegalStateException RuntimeException IndexOutOfBoundsException UnsupportedOperationException ArrayIndexOutOfBoundsException ArithmeticException ClassCastException EnumConstantNotPresentException StringIndexOutOfBoundsException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException NumberFormatException NullPointerException TypeNotPresentException SecurityException
76 syn cluster javaTop add=javaR_JavaLang
77 syn cluster javaClasses add=javaR_JavaLang
78 JavaHiLink javaR_JavaLang javaR_Java
79 syn keyword javaC_JavaLang Process RuntimePermission StringKeySet CharacterData01 Class ThreadLocal ThreadLocalMap CharacterData0E Package Character StringCoding Long ProcessImpl ProcessEnvironment Short AssertionStatusDirectives 1PackageInfoProxy UnicodeBlock InheritableThreadLocal AbstractStringBuilder StringEnvironment ClassLoader ConditionalSpecialCasing CharacterDataPrivateUse StringBuffer StringDecoder Entry StringEntry WrappedHook StringBuilder StrictMath State ThreadGroup Runtime CharacterData02 MethodArray Object CharacterDataUndefined Integer Gate Boolean Enum Variable Subset StringEncoder Void Terminator CharsetSD IntegerCache CharacterCache Byte CharsetSE Thread SystemClassLoaderAction CharacterDataLatin1 StringValues StackTraceElement Shutdown ShortCache String ConverterSD ByteCache Lock EnclosingMethodInfo Math Float Value Double SecurityManager LongCache ProcessBuilder StringEntrySet Compiler Number UNIXProcess ConverterSE ExternalData CaseInsensitiveComparator CharacterData00 NativeLibrary
80 syn cluster javaTop add=javaC_JavaLang
81 syn cluster javaClasses add=javaC_JavaLang
82 JavaHiLink javaC_JavaLang javaC_Java
83 syn keyword javaE_JavaLang IncompatibleClassChangeError InternalError UnknownError ClassCircularityError AssertionError ThreadDeath IllegalAccessError NoClassDefFoundError ClassFormatError UnsupportedClassVersionError NoSuchFieldError VerifyError ExceptionInInitializerError InstantiationError LinkageError NoSuchMethodError Error UnsatisfiedLinkError StackOverflowError AbstractMethodError VirtualMachineError OutOfMemoryError
84 syn cluster javaTop add=javaE_JavaLang
85 syn cluster javaClasses add=javaE_JavaLang
86 JavaHiLink javaE_JavaLang javaE_Java
87 syn keyword javaX_JavaLang CloneNotSupportedException Exception NoSuchMethodException IllegalAccessException NoSuchFieldException Throwable InterruptedException ClassNotFoundException InstantiationException
88 syn cluster javaTop add=javaX_JavaLang
89 syn cluster javaClasses add=javaX_JavaLang
90 JavaHiLink javaX_JavaLang javaX_Java
91
92 JavaHiLink javaR_Java javaR_
93 JavaHiLink javaC_Java javaC_
94 JavaHiLink javaE_Java javaE_
95 JavaHiLink javaX_Java javaX_
96 JavaHiLink javaX_ javaExceptions
97 JavaHiLink javaR_ javaExceptions
98 JavaHiLink javaE_ javaExceptions
99 JavaHiLink javaC_ javaConstant
100
Bram Moolenaar071d4272004-06-13 20:20:40 +0000101 syn keyword javaLangObject clone equals finalize getClass hashCode
102 syn keyword javaLangObject notify notifyAll toString wait
Bram Moolenaar071d4272004-06-13 20:20:40 +0000103 JavaHiLink javaLangObject javaConstant
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000104 syn cluster javaTop add=javaLangObject
Bram Moolenaar071d4272004-06-13 20:20:40 +0000105endif
106
107if filereadable(expand("<sfile>:p:h")."/javaid.vim")
108 source <sfile>:p:h/javaid.vim
109endif
110
111if exists("java_space_errors")
112 if !exists("java_no_trail_space_error")
113 syn match javaSpaceError "\s\+$"
114 endif
115 if !exists("java_no_tab_space_error")
116 syn match javaSpaceError " \+\t"me=e-1
117 endif
118endif
119
120syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter
121syn match javaUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
122syn keyword javaLabel default
123
124if !exists("java_allow_cpp_keywords")
125 syn keyword javaError auto delete extern friend inline redeclared
126 syn keyword javaError register signed sizeof struct template typedef union
127 syn keyword javaError unsigned operator
128endif
129
130" The following cluster contains all java groups except the contained ones
Bram Moolenaara5792f52005-11-23 21:25:05 +0000131syn cluster javaTop add=javaExternal,javaError,javaError,javaBranch,javaLabelRegion,javaLabel,javaConditional,javaRepeat,javaBoolean,javaConstant,javaTypedef,javaOperator,javaType,javaType,javaStatement,javaStorageClass,javaAssert,javaExceptions,javaMethodDecl,javaClassDecl,javaClassDecl,javaClassDecl,javaScopeDecl,javaError,javaError2,javaUserLabel,javaLangObject,javaAnnotation,javaVarArg
Bram Moolenaar071d4272004-06-13 20:20:40 +0000132
133
134" Comments
135syn keyword javaTodo contained TODO FIXME XXX
136if exists("java_comment_strings")
137 syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
138 syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell
139 syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
140 syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar
141 syn match javaCommentCharacter contained "'[^\\]'"
142 syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
143 syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
144endif
145syn region javaComment start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
146syn match javaCommentStar contained "^\s*\*[^/]"me=e-1
147syn match javaCommentStar contained "^\s*\*$"
148syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
149JavaHiLink javaCommentString javaString
150JavaHiLink javaComment2String javaString
151JavaHiLink javaCommentCharacter javaCharacter
152
153syn cluster javaTop add=javaComment,javaLineComment
154
155if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
156 syntax case ignore
157 " syntax coloring for javadoc comments (HTML)
158 syntax include @javaHtml <sfile>:p:h/html.vim
159 unlet b:current_syntax
Bram Moolenaar5c736222010-01-06 20:54:52 +0100160 " HTML enables spell checking for all text that is not in a syntax item. This
161 " is wrong for Java (all identifiers would be spell-checked), so it's undone
162 " here.
163 syntax spell default
164
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000165 syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
166 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 +0000167
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000168 syn region javaDocTags contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
169 syn match javaDocTags contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
170 syn match javaDocParam contained "\s\S\+"
171 syn match javaDocTags contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
172 syn region javaDocSeeTag contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
173 syn match javaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000174 syntax case match
175endif
176
177" match the special comment /**/
178syn match javaComment "/\*\*/"
179
180" Strings and constants
181syn match javaSpecialError contained "\\."
182syn match javaSpecialCharError contained "[^']"
Bram Moolenaar5c736222010-01-06 20:54:52 +0100183syn match javaSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\+\x\{4\}\)"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000184syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
185" next line disabled, it can cause a crash for a long line
186"syn match javaStringError +"\([^"\\]\|\\.\)*$+
187syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
188syn match javaCharacter "'\\''" contains=javaSpecialChar
189syn match javaCharacter "'[^\\]'"
190syn match javaNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
191syn match javaNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
192syn match javaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
193syn match javaNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
194
195" unicode characters
Bram Moolenaar5c736222010-01-06 20:54:52 +0100196syn match javaSpecial "\\u\+\d\{4\}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000197
198syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
199
200if exists("java_highlight_functions")
201 if java_highlight_functions == "indent"
202 syn match javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
203 syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
204 syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
205 syn region javaFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
206 else
207 " This line catches method declarations at any indentation>0, but it assumes
208 " two things:
209 " 1. class names are always capitalized (ie: Button)
210 " 2. method names are never capitalized (except constructors, of course)
211 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
212 endif
213 syn match javaBraces "[{}]"
214 syn cluster javaTop add=javaFuncDef,javaBraces
215endif
216
217if exists("java_highlight_debug")
218
219 " Strings and constants
220 syn match javaDebugSpecial contained "\\\d\d\d\|\\."
221 syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
222 syn match javaDebugStringError +"\([^"\\]\|\\.\)*$+
223 syn match javaDebugCharacter contained "'[^\\]'"
224 syn match javaDebugSpecialCharacter contained "'\\.'"
225 syn match javaDebugSpecialCharacter contained "'\\''"
226 syn match javaDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
227 syn match javaDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
228 syn match javaDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
229 syn match javaDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
230 syn keyword javaDebugBoolean contained true false
231 syn keyword javaDebugType contained null this super
232 syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
233
234 " to make this work you must define the highlighting for these groups
235 syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000236 syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar071d4272004-06-13 20:20:40 +0000237 syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
238 syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
239
240 syn cluster javaTop add=javaDebug
241
242 if version >= 508 || !exists("did_c_syn_inits")
243 JavaHiLink javaDebug Debug
244 JavaHiLink javaDebugString DebugString
245 JavaHiLink javaDebugStringError javaError
246 JavaHiLink javaDebugType DebugType
247 JavaHiLink javaDebugBoolean DebugBoolean
248 JavaHiLink javaDebugNumber Debug
249 JavaHiLink javaDebugSpecial DebugSpecial
250 JavaHiLink javaDebugSpecialCharacter DebugSpecial
251 JavaHiLink javaDebugCharacter DebugString
252 JavaHiLink javaDebugParen Debug
253
254 JavaHiLink DebugString String
255 JavaHiLink DebugSpecial Special
256 JavaHiLink DebugBoolean Boolean
257 JavaHiLink DebugType Type
258 endif
259endif
260
261if exists("java_mark_braces_in_parens_as_errors")
262 syn match javaInParen contained "[{}]"
263 JavaHiLink javaInParen javaError
264 syn cluster javaTop add=javaInParen
265endif
266
267" catch errors caused by wrong parenthesis
268syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1
269syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
270syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained
271syn match javaParenError ")"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000272" catch errors caused by wrong square parenthesis
273syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1
274syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
275syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained
276syn match javaParenError "\]"
277
Bram Moolenaar071d4272004-06-13 20:20:40 +0000278JavaHiLink javaParenError javaError
279
280if !exists("java_minlines")
281 let java_minlines = 10
282endif
283exec "syn sync ccomment javaComment minlines=" . java_minlines
284
285" The default highlighting.
286if version >= 508 || !exists("did_java_syn_inits")
287 if version < 508
288 let did_java_syn_inits = 1
289 endif
290 JavaHiLink javaFuncDef Function
Bram Moolenaara5792f52005-11-23 21:25:05 +0000291 JavaHiLink javaVarArg Function
Bram Moolenaar071d4272004-06-13 20:20:40 +0000292 JavaHiLink javaBraces Function
293 JavaHiLink javaBranch Conditional
294 JavaHiLink javaUserLabelRef javaUserLabel
295 JavaHiLink javaLabel Label
296 JavaHiLink javaUserLabel Label
297 JavaHiLink javaConditional Conditional
298 JavaHiLink javaRepeat Repeat
299 JavaHiLink javaExceptions Exception
300 JavaHiLink javaAssert Statement
301 JavaHiLink javaStorageClass StorageClass
302 JavaHiLink javaMethodDecl javaStorageClass
303 JavaHiLink javaClassDecl javaStorageClass
304 JavaHiLink javaScopeDecl javaStorageClass
305 JavaHiLink javaBoolean Boolean
306 JavaHiLink javaSpecial Special
307 JavaHiLink javaSpecialError Error
308 JavaHiLink javaSpecialCharError Error
309 JavaHiLink javaString String
310 JavaHiLink javaCharacter Character
311 JavaHiLink javaSpecialChar SpecialChar
312 JavaHiLink javaNumber Number
313 JavaHiLink javaError Error
314 JavaHiLink javaStringError Error
315 JavaHiLink javaStatement Statement
316 JavaHiLink javaOperator Operator
317 JavaHiLink javaComment Comment
318 JavaHiLink javaDocComment Comment
319 JavaHiLink javaLineComment Comment
320 JavaHiLink javaConstant Constant
321 JavaHiLink javaTypedef Typedef
322 JavaHiLink javaTodo Todo
Bram Moolenaara5792f52005-11-23 21:25:05 +0000323 JavaHiLink javaAnnotation PreProc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000324
325 JavaHiLink javaCommentTitle SpecialComment
326 JavaHiLink javaDocTags Special
327 JavaHiLink javaDocParam Function
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000328 JavaHiLink javaDocSeeTagParam Function
Bram Moolenaar071d4272004-06-13 20:20:40 +0000329 JavaHiLink javaCommentStar javaComment
330
331 JavaHiLink javaType Type
332 JavaHiLink javaExternal Include
333
334 JavaHiLink htmlComment Special
335 JavaHiLink htmlCommentPart Special
336 JavaHiLink javaSpaceError Error
337endif
338
339delcommand JavaHiLink
340
341let b:current_syntax = "java"
342
343if main_syntax == 'java'
344 unlet main_syntax
345endif
346
347let b:spell_options="contained"
348
349" vim: ts=8