blob: d5e32faed41f55c57199456a91dd1d9b70f01f64 [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 Moolenaar446cb832008-06-24 21:56:24 +00005" Last Change: 2007 Dec 21
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'
18endif
19
20" don't use standard HiLink, it will not work with included syntax files
21if version < 508
22 command! -nargs=+ JavaHiLink hi link <args>
23else
24 command! -nargs=+ JavaHiLink hi def link <args>
25endif
26
27" some characters that cannot be in a java program (outside a string)
28syn match javaError "[\\@`]"
29syn match javaError "<<<\|\.\.\|=>\|<>\|||=\|&&=\|[^-]->\|\*\/"
30syn match javaOK "\.\.\."
31
32" use separate name so that it can be deleted in javacc.vim
33syn match javaError2 "#\|=<"
34JavaHiLink javaError2 javaError
35
36
37
38" keyword definitions
39syn keyword javaExternal native package
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000040syn match javaExternal "\<import\>\(\s\+static\>\)\?"
Bram Moolenaar071d4272004-06-13 20:20:40 +000041syn keyword javaError goto const
42syn keyword javaConditional if else switch
43syn keyword javaRepeat while for do
44syn keyword javaBoolean true false
45syn keyword javaConstant null
46syn keyword javaTypedef this super
47syn keyword javaOperator new instanceof
48syn keyword javaType boolean char byte short int long float double
49syn keyword javaType void
50syn keyword javaStatement return
51syn keyword javaStorageClass static synchronized transient volatile final strictfp serializable
52syn keyword javaExceptions throw try catch finally
53syn keyword javaAssert assert
54syn keyword javaMethodDecl synchronized throws
55syn keyword javaClassDecl extends implements interface
56" to differentiate the keyword class from MyClass.class we use a match here
57syn match javaTypedef "\.\s*\<class\>"ms=s+1
58syn keyword javaClassDecl enum
59syn match javaClassDecl "^class\>"
60syn match javaClassDecl "[^.]\s*\<class\>"ms=s+1
Bram Moolenaara5792f52005-11-23 21:25:05 +000061syn match javaAnnotation "@[_$a-zA-Z][_$a-zA-Z0-9_]*\>"
62syn match javaClassDecl "@interface\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000063syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite
64syn match javaUserLabelRef "\k\+" contained
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000065syn match javaVarArg "\.\.\."
Bram Moolenaar071d4272004-06-13 20:20:40 +000066syn keyword javaScopeDecl public protected private abstract
67
Bram Moolenaar8ada17c2006-01-19 22:16:24 +000068if exists("java_highlight_java_lang_ids")
69 let java_highlight_all=1
70endif
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000071if exists("java_highlight_all") || exists("java_highlight_java") || exists("java_highlight_java_lang")
Bram Moolenaar071d4272004-06-13 20:20:40 +000072 " java.lang.*
73 syn match javaLangClass "\<System\>"
Bram Moolenaar8ada17c2006-01-19 22:16:24 +000074 syn keyword javaR_JavaLang NegativeArraySizeException ArrayStoreException IllegalStateException RuntimeException IndexOutOfBoundsException UnsupportedOperationException ArrayIndexOutOfBoundsException ArithmeticException ClassCastException EnumConstantNotPresentException StringIndexOutOfBoundsException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException NumberFormatException NullPointerException TypeNotPresentException SecurityException
75 syn cluster javaTop add=javaR_JavaLang
76 syn cluster javaClasses add=javaR_JavaLang
77 JavaHiLink javaR_JavaLang javaR_Java
78 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
79 syn cluster javaTop add=javaC_JavaLang
80 syn cluster javaClasses add=javaC_JavaLang
81 JavaHiLink javaC_JavaLang javaC_Java
82 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
83 syn cluster javaTop add=javaE_JavaLang
84 syn cluster javaClasses add=javaE_JavaLang
85 JavaHiLink javaE_JavaLang javaE_Java
86 syn keyword javaX_JavaLang CloneNotSupportedException Exception NoSuchMethodException IllegalAccessException NoSuchFieldException Throwable InterruptedException ClassNotFoundException InstantiationException
87 syn cluster javaTop add=javaX_JavaLang
88 syn cluster javaClasses add=javaX_JavaLang
89 JavaHiLink javaX_JavaLang javaX_Java
90
91 JavaHiLink javaR_Java javaR_
92 JavaHiLink javaC_Java javaC_
93 JavaHiLink javaE_Java javaE_
94 JavaHiLink javaX_Java javaX_
95 JavaHiLink javaX_ javaExceptions
96 JavaHiLink javaR_ javaExceptions
97 JavaHiLink javaE_ javaExceptions
98 JavaHiLink javaC_ javaConstant
99
Bram Moolenaar071d4272004-06-13 20:20:40 +0000100 syn keyword javaLangObject clone equals finalize getClass hashCode
101 syn keyword javaLangObject notify notifyAll toString wait
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102 JavaHiLink javaLangObject javaConstant
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000103 syn cluster javaTop add=javaLangObject
Bram Moolenaar071d4272004-06-13 20:20:40 +0000104endif
105
106if filereadable(expand("<sfile>:p:h")."/javaid.vim")
107 source <sfile>:p:h/javaid.vim
108endif
109
110if exists("java_space_errors")
111 if !exists("java_no_trail_space_error")
112 syn match javaSpaceError "\s\+$"
113 endif
114 if !exists("java_no_tab_space_error")
115 syn match javaSpaceError " \+\t"me=e-1
116 endif
117endif
118
119syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter
120syn match javaUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
121syn keyword javaLabel default
122
123if !exists("java_allow_cpp_keywords")
Bram Moolenaar446cb832008-06-24 21:56:24 +0000124 " The default used to be to highlight C++ keywords. But several people
125 " don't like that, so default to not highlighting these.
126 let java_allow_cpp_keywords = 1
127endif
128if !java_allow_cpp_keywords
Bram Moolenaar071d4272004-06-13 20:20:40 +0000129 syn keyword javaError auto delete extern friend inline redeclared
130 syn keyword javaError register signed sizeof struct template typedef union
131 syn keyword javaError unsigned operator
132endif
133
134" The following cluster contains all java groups except the contained ones
Bram Moolenaara5792f52005-11-23 21:25:05 +0000135syn 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 +0000136
137
138" Comments
139syn keyword javaTodo contained TODO FIXME XXX
140if exists("java_comment_strings")
141 syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
142 syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell
143 syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
144 syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar
145 syn match javaCommentCharacter contained "'[^\\]'"
146 syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
147 syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
148endif
149syn region javaComment start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
150syn match javaCommentStar contained "^\s*\*[^/]"me=e-1
151syn match javaCommentStar contained "^\s*\*$"
152syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
153JavaHiLink javaCommentString javaString
154JavaHiLink javaComment2String javaString
155JavaHiLink javaCommentCharacter javaCharacter
156
157syn cluster javaTop add=javaComment,javaLineComment
158
159if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
160 syntax case ignore
161 " syntax coloring for javadoc comments (HTML)
162 syntax include @javaHtml <sfile>:p:h/html.vim
163 unlet b:current_syntax
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000164 syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
165 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 +0000166
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000167 syn region javaDocTags contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
168 syn match javaDocTags contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
169 syn match javaDocParam contained "\s\S\+"
170 syn match javaDocTags contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
171 syn region javaDocSeeTag contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
172 syn match javaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000173 syntax case match
174endif
175
176" match the special comment /**/
177syn match javaComment "/\*\*/"
178
179" Strings and constants
180syn match javaSpecialError contained "\\."
181syn match javaSpecialCharError contained "[^']"
182syn match javaSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
183syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
184" next line disabled, it can cause a crash for a long line
185"syn match javaStringError +"\([^"\\]\|\\.\)*$+
186syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
187syn match javaCharacter "'\\''" contains=javaSpecialChar
188syn match javaCharacter "'[^\\]'"
189syn match javaNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
190syn match javaNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
191syn match javaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
192syn match javaNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
193
194" unicode characters
195syn match javaSpecial "\\u\d\{4\}"
196
197syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
198
199if exists("java_highlight_functions")
200 if java_highlight_functions == "indent"
201 syn match javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
202 syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
203 syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
204 syn region javaFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
205 else
206 " This line catches method declarations at any indentation>0, but it assumes
207 " two things:
208 " 1. class names are always capitalized (ie: Button)
209 " 2. method names are never capitalized (except constructors, of course)
210 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
211 endif
212 syn match javaBraces "[{}]"
213 syn cluster javaTop add=javaFuncDef,javaBraces
214endif
215
216if exists("java_highlight_debug")
217
218 " Strings and constants
219 syn match javaDebugSpecial contained "\\\d\d\d\|\\."
220 syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
221 syn match javaDebugStringError +"\([^"\\]\|\\.\)*$+
222 syn match javaDebugCharacter contained "'[^\\]'"
223 syn match javaDebugSpecialCharacter contained "'\\.'"
224 syn match javaDebugSpecialCharacter contained "'\\''"
225 syn match javaDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
226 syn match javaDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
227 syn match javaDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
228 syn match javaDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
229 syn keyword javaDebugBoolean contained true false
230 syn keyword javaDebugType contained null this super
231 syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
232
233 " to make this work you must define the highlighting for these groups
234 syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000235 syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar071d4272004-06-13 20:20:40 +0000236 syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
237 syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
238
239 syn cluster javaTop add=javaDebug
240
241 if version >= 508 || !exists("did_c_syn_inits")
242 JavaHiLink javaDebug Debug
243 JavaHiLink javaDebugString DebugString
244 JavaHiLink javaDebugStringError javaError
245 JavaHiLink javaDebugType DebugType
246 JavaHiLink javaDebugBoolean DebugBoolean
247 JavaHiLink javaDebugNumber Debug
248 JavaHiLink javaDebugSpecial DebugSpecial
249 JavaHiLink javaDebugSpecialCharacter DebugSpecial
250 JavaHiLink javaDebugCharacter DebugString
251 JavaHiLink javaDebugParen Debug
252
253 JavaHiLink DebugString String
254 JavaHiLink DebugSpecial Special
255 JavaHiLink DebugBoolean Boolean
256 JavaHiLink DebugType Type
257 endif
258endif
259
260if exists("java_mark_braces_in_parens_as_errors")
261 syn match javaInParen contained "[{}]"
262 JavaHiLink javaInParen javaError
263 syn cluster javaTop add=javaInParen
264endif
265
266" catch errors caused by wrong parenthesis
267syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1
268syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
269syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained
270syn match javaParenError ")"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000271" catch errors caused by wrong square parenthesis
272syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1
273syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
274syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained
275syn match javaParenError "\]"
276
Bram Moolenaar071d4272004-06-13 20:20:40 +0000277JavaHiLink javaParenError javaError
278
279if !exists("java_minlines")
280 let java_minlines = 10
281endif
282exec "syn sync ccomment javaComment minlines=" . java_minlines
283
284" The default highlighting.
285if version >= 508 || !exists("did_java_syn_inits")
286 if version < 508
287 let did_java_syn_inits = 1
288 endif
289 JavaHiLink javaFuncDef Function
Bram Moolenaara5792f52005-11-23 21:25:05 +0000290 JavaHiLink javaVarArg Function
Bram Moolenaar071d4272004-06-13 20:20:40 +0000291 JavaHiLink javaBraces Function
292 JavaHiLink javaBranch Conditional
293 JavaHiLink javaUserLabelRef javaUserLabel
294 JavaHiLink javaLabel Label
295 JavaHiLink javaUserLabel Label
296 JavaHiLink javaConditional Conditional
297 JavaHiLink javaRepeat Repeat
298 JavaHiLink javaExceptions Exception
299 JavaHiLink javaAssert Statement
300 JavaHiLink javaStorageClass StorageClass
301 JavaHiLink javaMethodDecl javaStorageClass
302 JavaHiLink javaClassDecl javaStorageClass
303 JavaHiLink javaScopeDecl javaStorageClass
304 JavaHiLink javaBoolean Boolean
305 JavaHiLink javaSpecial Special
306 JavaHiLink javaSpecialError Error
307 JavaHiLink javaSpecialCharError Error
308 JavaHiLink javaString String
309 JavaHiLink javaCharacter Character
310 JavaHiLink javaSpecialChar SpecialChar
311 JavaHiLink javaNumber Number
312 JavaHiLink javaError Error
313 JavaHiLink javaStringError Error
314 JavaHiLink javaStatement Statement
315 JavaHiLink javaOperator Operator
316 JavaHiLink javaComment Comment
317 JavaHiLink javaDocComment Comment
318 JavaHiLink javaLineComment Comment
319 JavaHiLink javaConstant Constant
320 JavaHiLink javaTypedef Typedef
321 JavaHiLink javaTodo Todo
Bram Moolenaara5792f52005-11-23 21:25:05 +0000322 JavaHiLink javaAnnotation PreProc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000323
324 JavaHiLink javaCommentTitle SpecialComment
325 JavaHiLink javaDocTags Special
326 JavaHiLink javaDocParam Function
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000327 JavaHiLink javaDocSeeTagParam Function
Bram Moolenaar071d4272004-06-13 20:20:40 +0000328 JavaHiLink javaCommentStar javaComment
329
330 JavaHiLink javaType Type
331 JavaHiLink javaExternal Include
332
333 JavaHiLink htmlComment Special
334 JavaHiLink htmlCommentPart Special
335 JavaHiLink javaSpaceError Error
336endif
337
338delcommand JavaHiLink
339
340let b:current_syntax = "java"
341
342if main_syntax == 'java'
343 unlet main_syntax
344endif
345
346let b:spell_options="contained"
347
348" vim: ts=8