blob: 0c250c643f4b35b16917eca7753cdc6049501881 [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 Moolenaar8ada17c2006-01-19 22:16:24 +00005" Last Change: 2006 Jan 15
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 Moolenaar293ee4d2004-12-09 21:34:53 +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 Moolenaara5792f52005-11-23 21:25:05 +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
71if 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")
124 syn keyword javaError auto delete extern friend inline redeclared
125 syn keyword javaError register signed sizeof struct template typedef union
126 syn keyword javaError unsigned operator
127endif
128
129" The following cluster contains all java groups except the contained ones
Bram Moolenaara5792f52005-11-23 21:25:05 +0000130syn 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 +0000131
132
133" Comments
134syn keyword javaTodo contained TODO FIXME XXX
135if exists("java_comment_strings")
136 syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
137 syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell
138 syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
139 syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar
140 syn match javaCommentCharacter contained "'[^\\]'"
141 syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
142 syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
143endif
144syn region javaComment start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
145syn match javaCommentStar contained "^\s*\*[^/]"me=e-1
146syn match javaCommentStar contained "^\s*\*$"
147syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
148JavaHiLink javaCommentString javaString
149JavaHiLink javaComment2String javaString
150JavaHiLink javaCommentCharacter javaCharacter
151
152syn cluster javaTop add=javaComment,javaLineComment
153
154if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
155 syntax case ignore
156 " syntax coloring for javadoc comments (HTML)
157 syntax include @javaHtml <sfile>:p:h/html.vim
158 unlet b:current_syntax
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000159 syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
160 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 +0000161
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000162 syn region javaDocTags contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
163 syn match javaDocTags contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
164 syn match javaDocParam contained "\s\S\+"
165 syn match javaDocTags contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
166 syn region javaDocSeeTag contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
167 syn match javaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000168 syntax case match
169endif
170
171" match the special comment /**/
172syn match javaComment "/\*\*/"
173
174" Strings and constants
175syn match javaSpecialError contained "\\."
176syn match javaSpecialCharError contained "[^']"
177syn match javaSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
178syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
179" next line disabled, it can cause a crash for a long line
180"syn match javaStringError +"\([^"\\]\|\\.\)*$+
181syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
182syn match javaCharacter "'\\''" contains=javaSpecialChar
183syn match javaCharacter "'[^\\]'"
184syn match javaNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
185syn match javaNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
186syn match javaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
187syn match javaNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
188
189" unicode characters
190syn match javaSpecial "\\u\d\{4\}"
191
192syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
193
194if exists("java_highlight_functions")
195 if java_highlight_functions == "indent"
196 syn match javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
197 syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
198 syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
199 syn region javaFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
200 else
201 " This line catches method declarations at any indentation>0, but it assumes
202 " two things:
203 " 1. class names are always capitalized (ie: Button)
204 " 2. method names are never capitalized (except constructors, of course)
205 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
206 endif
207 syn match javaBraces "[{}]"
208 syn cluster javaTop add=javaFuncDef,javaBraces
209endif
210
211if exists("java_highlight_debug")
212
213 " Strings and constants
214 syn match javaDebugSpecial contained "\\\d\d\d\|\\."
215 syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
216 syn match javaDebugStringError +"\([^"\\]\|\\.\)*$+
217 syn match javaDebugCharacter contained "'[^\\]'"
218 syn match javaDebugSpecialCharacter contained "'\\.'"
219 syn match javaDebugSpecialCharacter contained "'\\''"
220 syn match javaDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
221 syn match javaDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
222 syn match javaDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
223 syn match javaDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
224 syn keyword javaDebugBoolean contained true false
225 syn keyword javaDebugType contained null this super
226 syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
227
228 " to make this work you must define the highlighting for these groups
229 syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000230 syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar071d4272004-06-13 20:20:40 +0000231 syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
232 syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
233
234 syn cluster javaTop add=javaDebug
235
236 if version >= 508 || !exists("did_c_syn_inits")
237 JavaHiLink javaDebug Debug
238 JavaHiLink javaDebugString DebugString
239 JavaHiLink javaDebugStringError javaError
240 JavaHiLink javaDebugType DebugType
241 JavaHiLink javaDebugBoolean DebugBoolean
242 JavaHiLink javaDebugNumber Debug
243 JavaHiLink javaDebugSpecial DebugSpecial
244 JavaHiLink javaDebugSpecialCharacter DebugSpecial
245 JavaHiLink javaDebugCharacter DebugString
246 JavaHiLink javaDebugParen Debug
247
248 JavaHiLink DebugString String
249 JavaHiLink DebugSpecial Special
250 JavaHiLink DebugBoolean Boolean
251 JavaHiLink DebugType Type
252 endif
253endif
254
255if exists("java_mark_braces_in_parens_as_errors")
256 syn match javaInParen contained "[{}]"
257 JavaHiLink javaInParen javaError
258 syn cluster javaTop add=javaInParen
259endif
260
261" catch errors caused by wrong parenthesis
262syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1
263syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
264syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained
265syn match javaParenError ")"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000266" catch errors caused by wrong square 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 "\]"
271
Bram Moolenaar071d4272004-06-13 20:20:40 +0000272JavaHiLink javaParenError javaError
273
274if !exists("java_minlines")
275 let java_minlines = 10
276endif
277exec "syn sync ccomment javaComment minlines=" . java_minlines
278
279" The default highlighting.
280if version >= 508 || !exists("did_java_syn_inits")
281 if version < 508
282 let did_java_syn_inits = 1
283 endif
284 JavaHiLink javaFuncDef Function
Bram Moolenaara5792f52005-11-23 21:25:05 +0000285 JavaHiLink javaVarArg Function
Bram Moolenaar071d4272004-06-13 20:20:40 +0000286 JavaHiLink javaBraces Function
287 JavaHiLink javaBranch Conditional
288 JavaHiLink javaUserLabelRef javaUserLabel
289 JavaHiLink javaLabel Label
290 JavaHiLink javaUserLabel Label
291 JavaHiLink javaConditional Conditional
292 JavaHiLink javaRepeat Repeat
293 JavaHiLink javaExceptions Exception
294 JavaHiLink javaAssert Statement
295 JavaHiLink javaStorageClass StorageClass
296 JavaHiLink javaMethodDecl javaStorageClass
297 JavaHiLink javaClassDecl javaStorageClass
298 JavaHiLink javaScopeDecl javaStorageClass
299 JavaHiLink javaBoolean Boolean
300 JavaHiLink javaSpecial Special
301 JavaHiLink javaSpecialError Error
302 JavaHiLink javaSpecialCharError Error
303 JavaHiLink javaString String
304 JavaHiLink javaCharacter Character
305 JavaHiLink javaSpecialChar SpecialChar
306 JavaHiLink javaNumber Number
307 JavaHiLink javaError Error
308 JavaHiLink javaStringError Error
309 JavaHiLink javaStatement Statement
310 JavaHiLink javaOperator Operator
311 JavaHiLink javaComment Comment
312 JavaHiLink javaDocComment Comment
313 JavaHiLink javaLineComment Comment
314 JavaHiLink javaConstant Constant
315 JavaHiLink javaTypedef Typedef
316 JavaHiLink javaTodo Todo
Bram Moolenaara5792f52005-11-23 21:25:05 +0000317 JavaHiLink javaAnnotation PreProc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000318
319 JavaHiLink javaCommentTitle SpecialComment
320 JavaHiLink javaDocTags Special
321 JavaHiLink javaDocParam Function
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000322 JavaHiLink javaDocSeeTagParam Function
Bram Moolenaar071d4272004-06-13 20:20:40 +0000323 JavaHiLink javaCommentStar javaComment
324
325 JavaHiLink javaType Type
326 JavaHiLink javaExternal Include
327
328 JavaHiLink htmlComment Special
329 JavaHiLink htmlCommentPart Special
330 JavaHiLink javaSpaceError Error
331endif
332
333delcommand JavaHiLink
334
335let b:current_syntax = "java"
336
337if main_syntax == 'java'
338 unlet main_syntax
339endif
340
341let b:spell_options="contained"
342
343" vim: ts=8