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