xref: /vim-8.2.3635/runtime/syntax/java.vim (revision a5792f58)
1" Vim syntax file
2" Language:     Java
3" Maintainer:   Claudio Fleiner <[email protected]>
4" URL:		http://www.fleiner.com/vim/syntax/java.vim
5" Last Change:  2005 Nov 04
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 match   javaAnnotation      "@[_$a-zA-Z][_$a-zA-Z0-9_]*\>"
62syn match   javaClassDecl       "@interface\>"
63syn keyword javaBranch		break continue nextgroup=javaUserLabelRef skipwhite
64syn match   javaUserLabelRef	"\k\+" contained
65syn match   javaVarArg          "\.\.\."
66syn 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
136syn 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
137
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
234  syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
235  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       ")"
270" 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
276JavaHiLink 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
289  JavaHiLink javaVarArg                 Function
290  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
321  JavaHiLink javaAnnotation             PreProc
322
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
347