blob: 030e9ec2c5d7fdce6be16c8e0db931921b4cbc8b [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 Moolenaar293ee4d2004-12-09 21:34:53 +00005" Last Change: 2004 Nov 12
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
61syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite
62syn match javaUserLabelRef "\k\+" contained
63syn keyword javaScopeDecl public protected private abstract
64
65if exists("java_highlight_java_lang_ids") || exists("java_highlight_java_lang") || exists("java_highlight_all")
66 " java.lang.*
67 syn match javaLangClass "\<System\>"
68 syn keyword javaLangClass Cloneable Comparable Runnable Boolean Byte Class
69 syn keyword javaLangClass Character CharSequence ClassLoader Compiler Double Float
70 syn keyword javaLangClass Integer InheritableThreadLocal Long Math Number Object Package Process
71 syn keyword javaLangClass Runtime RuntimePermission InheritableThreadLocal
72 syn keyword javaLangClass SecurityManager Short String StrictMath StackTraceElement
73 syn keyword javaLangClass StringBuffer Thread ThreadGroup
74 syn keyword javaLangClass ThreadLocal Throwable Void ArithmeticException
75 syn keyword javaLangClass ArrayIndexOutOfBoundsException AssertionError
76 syn keyword javaLangClass ArrayStoreException ClassCastException
77 syn keyword javaLangClass ClassNotFoundException
78 syn keyword javaLangClass CloneNotSupportedException Exception
79 syn keyword javaLangClass IllegalAccessException
80 syn keyword javaLangClass IllegalArgumentException
81 syn keyword javaLangClass IllegalMonitorStateException
82 syn keyword javaLangClass IllegalStateException
83 syn keyword javaLangClass IllegalThreadStateException
84 syn keyword javaLangClass IndexOutOfBoundsException
85 syn keyword javaLangClass InstantiationException InterruptedException
86 syn keyword javaLangClass NegativeArraySizeException NoSuchFieldException
87 syn keyword javaLangClass NoSuchMethodException NullPointerException
88 syn keyword javaLangClass NumberFormatException RuntimeException
89 syn keyword javaLangClass SecurityException StringIndexOutOfBoundsException
90 syn keyword javaLangClass UnsupportedOperationException
91 syn keyword javaLangClass AbstractMethodError ClassCircularityError
92 syn keyword javaLangClass ClassFormatError Error ExceptionInInitializerError
93 syn keyword javaLangClass IllegalAccessError InstantiationError
94 syn keyword javaLangClass IncompatibleClassChangeError InternalError
95 syn keyword javaLangClass LinkageError NoClassDefFoundError
96 syn keyword javaLangClass NoSuchFieldError NoSuchMethodError
97 syn keyword javaLangClass OutOfMemoryError StackOverflowError
98 syn keyword javaLangClass ThreadDeath UnknownError UnsatisfiedLinkError
99 syn keyword javaLangClass UnsupportedClassVersionError VerifyError
100 syn keyword javaLangClass VirtualMachineError
101 syn keyword javaLangObject clone equals finalize getClass hashCode
102 syn keyword javaLangObject notify notifyAll toString wait
103 JavaHiLink javaLangClass javaConstant
104 JavaHiLink javaLangObject javaConstant
105 syn cluster javaTop add=javaLangObject,javaLangClass
106 syn cluster javaClasses add=javaLangClass
107endif
108
109if filereadable(expand("<sfile>:p:h")."/javaid.vim")
110 source <sfile>:p:h/javaid.vim
111endif
112
113if exists("java_space_errors")
114 if !exists("java_no_trail_space_error")
115 syn match javaSpaceError "\s\+$"
116 endif
117 if !exists("java_no_tab_space_error")
118 syn match javaSpaceError " \+\t"me=e-1
119 endif
120endif
121
122syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter
123syn match javaUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
124syn keyword javaLabel default
125
126if !exists("java_allow_cpp_keywords")
127 syn keyword javaError auto delete extern friend inline redeclared
128 syn keyword javaError register signed sizeof struct template typedef union
129 syn keyword javaError unsigned operator
130endif
131
132" The following cluster contains all java groups except the contained ones
133syn 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
134
135
136" Comments
137syn keyword javaTodo contained TODO FIXME XXX
138if exists("java_comment_strings")
139 syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
140 syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell
141 syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
142 syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar
143 syn match javaCommentCharacter contained "'[^\\]'"
144 syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
145 syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
146endif
147syn region javaComment start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
148syn match javaCommentStar contained "^\s*\*[^/]"me=e-1
149syn match javaCommentStar contained "^\s*\*$"
150syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
151JavaHiLink javaCommentString javaString
152JavaHiLink javaComment2String javaString
153JavaHiLink javaCommentCharacter javaCharacter
154
155syn cluster javaTop add=javaComment,javaLineComment
156
157if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
158 syntax case ignore
159 " syntax coloring for javadoc comments (HTML)
160 syntax include @javaHtml <sfile>:p:h/html.vim
161 unlet b:current_syntax
162 syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaTodo,@Spell
163 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
164
165 syn region javaDocTags contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
166 syn match javaDocTags contained "@\(see\|param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
167 syn match javaDocParam contained "\s\S\+"
168 syn match javaDocTags contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
169 syntax case match
170endif
171
172" match the special comment /**/
173syn match javaComment "/\*\*/"
174
175" Strings and constants
176syn match javaSpecialError contained "\\."
177syn match javaSpecialCharError contained "[^']"
178syn match javaSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
179syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
180" next line disabled, it can cause a crash for a long line
181"syn match javaStringError +"\([^"\\]\|\\.\)*$+
182syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
183syn match javaCharacter "'\\''" contains=javaSpecialChar
184syn match javaCharacter "'[^\\]'"
185syn match javaNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
186syn match javaNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
187syn match javaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
188syn match javaNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
189
190" unicode characters
191syn match javaSpecial "\\u\d\{4\}"
192
193syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
194
195if exists("java_highlight_functions")
196 if java_highlight_functions == "indent"
197 syn match javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
198 syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
199 syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
200 syn region javaFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
201 else
202 " This line catches method declarations at any indentation>0, but it assumes
203 " two things:
204 " 1. class names are always capitalized (ie: Button)
205 " 2. method names are never capitalized (except constructors, of course)
206 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
207 endif
208 syn match javaBraces "[{}]"
209 syn cluster javaTop add=javaFuncDef,javaBraces
210endif
211
212if exists("java_highlight_debug")
213
214 " Strings and constants
215 syn match javaDebugSpecial contained "\\\d\d\d\|\\."
216 syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
217 syn match javaDebugStringError +"\([^"\\]\|\\.\)*$+
218 syn match javaDebugCharacter contained "'[^\\]'"
219 syn match javaDebugSpecialCharacter contained "'\\.'"
220 syn match javaDebugSpecialCharacter contained "'\\''"
221 syn match javaDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
222 syn match javaDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
223 syn match javaDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
224 syn match javaDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
225 syn keyword javaDebugBoolean contained true false
226 syn keyword javaDebugType contained null this super
227 syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
228
229 " to make this work you must define the highlighting for these groups
230 syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000231 syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar071d4272004-06-13 20:20:40 +0000232 syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
233 syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
234
235 syn cluster javaTop add=javaDebug
236
237 if version >= 508 || !exists("did_c_syn_inits")
238 JavaHiLink javaDebug Debug
239 JavaHiLink javaDebugString DebugString
240 JavaHiLink javaDebugStringError javaError
241 JavaHiLink javaDebugType DebugType
242 JavaHiLink javaDebugBoolean DebugBoolean
243 JavaHiLink javaDebugNumber Debug
244 JavaHiLink javaDebugSpecial DebugSpecial
245 JavaHiLink javaDebugSpecialCharacter DebugSpecial
246 JavaHiLink javaDebugCharacter DebugString
247 JavaHiLink javaDebugParen Debug
248
249 JavaHiLink DebugString String
250 JavaHiLink DebugSpecial Special
251 JavaHiLink DebugBoolean Boolean
252 JavaHiLink DebugType Type
253 endif
254endif
255
256if exists("java_mark_braces_in_parens_as_errors")
257 syn match javaInParen contained "[{}]"
258 JavaHiLink javaInParen javaError
259 syn cluster javaTop add=javaInParen
260endif
261
262" catch errors caused by wrong parenthesis
263syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1
264syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
265syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained
266syn match javaParenError ")"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000267" catch errors caused by wrong square 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 "\]"
272
Bram Moolenaar071d4272004-06-13 20:20:40 +0000273JavaHiLink javaParenError javaError
274
275if !exists("java_minlines")
276 let java_minlines = 10
277endif
278exec "syn sync ccomment javaComment minlines=" . java_minlines
279
280" The default highlighting.
281if version >= 508 || !exists("did_java_syn_inits")
282 if version < 508
283 let did_java_syn_inits = 1
284 endif
285 JavaHiLink javaFuncDef Function
286 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
317
318 JavaHiLink javaCommentTitle SpecialComment
319 JavaHiLink javaDocTags Special
320 JavaHiLink javaDocParam Function
321 JavaHiLink javaCommentStar javaComment
322
323 JavaHiLink javaType Type
324 JavaHiLink javaExternal Include
325
326 JavaHiLink htmlComment Special
327 JavaHiLink htmlCommentPart Special
328 JavaHiLink javaSpaceError Error
329endif
330
331delcommand JavaHiLink
332
333let b:current_syntax = "java"
334
335if main_syntax == 'java'
336 unlet main_syntax
337endif
338
339let b:spell_options="contained"
340
341" vim: ts=8