blob: b47c17e69346415a7168ce41623945e3376b7399 [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
5" Last Change: 2004 Apr 23
6
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
40syn match javaExternal "\<import\(\s\+static\>\)\?"
41syn 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
231 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 ")"
266JavaHiLink javaParenError javaError
267
268if !exists("java_minlines")
269 let java_minlines = 10
270endif
271exec "syn sync ccomment javaComment minlines=" . java_minlines
272
273" The default highlighting.
274if version >= 508 || !exists("did_java_syn_inits")
275 if version < 508
276 let did_java_syn_inits = 1
277 endif
278 JavaHiLink javaFuncDef Function
279 JavaHiLink javaBraces Function
280 JavaHiLink javaBranch Conditional
281 JavaHiLink javaUserLabelRef javaUserLabel
282 JavaHiLink javaLabel Label
283 JavaHiLink javaUserLabel Label
284 JavaHiLink javaConditional Conditional
285 JavaHiLink javaRepeat Repeat
286 JavaHiLink javaExceptions Exception
287 JavaHiLink javaAssert Statement
288 JavaHiLink javaStorageClass StorageClass
289 JavaHiLink javaMethodDecl javaStorageClass
290 JavaHiLink javaClassDecl javaStorageClass
291 JavaHiLink javaScopeDecl javaStorageClass
292 JavaHiLink javaBoolean Boolean
293 JavaHiLink javaSpecial Special
294 JavaHiLink javaSpecialError Error
295 JavaHiLink javaSpecialCharError Error
296 JavaHiLink javaString String
297 JavaHiLink javaCharacter Character
298 JavaHiLink javaSpecialChar SpecialChar
299 JavaHiLink javaNumber Number
300 JavaHiLink javaError Error
301 JavaHiLink javaStringError Error
302 JavaHiLink javaStatement Statement
303 JavaHiLink javaOperator Operator
304 JavaHiLink javaComment Comment
305 JavaHiLink javaDocComment Comment
306 JavaHiLink javaLineComment Comment
307 JavaHiLink javaConstant Constant
308 JavaHiLink javaTypedef Typedef
309 JavaHiLink javaTodo Todo
310
311 JavaHiLink javaCommentTitle SpecialComment
312 JavaHiLink javaDocTags Special
313 JavaHiLink javaDocParam Function
314 JavaHiLink javaCommentStar javaComment
315
316 JavaHiLink javaType Type
317 JavaHiLink javaExternal Include
318
319 JavaHiLink htmlComment Special
320 JavaHiLink htmlCommentPart Special
321 JavaHiLink javaSpaceError Error
322endif
323
324delcommand JavaHiLink
325
326let b:current_syntax = "java"
327
328if main_syntax == 'java'
329 unlet main_syntax
330endif
331
332let b:spell_options="contained"
333
334" vim: ts=8