xref: /vim-8.2.3635/runtime/syntax/java.vim (revision 0c5fa7d7)
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:	2012 Oct 05
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'
18  syn region javaFold start="{" end="}" transparent fold
19endif
20
21let s:cpo_save = &cpo
22set cpo&vim
23
24" don't use standard HiLink, it will not work with included syntax files
25if version < 508
26  command! -nargs=+ JavaHiLink hi link <args>
27else
28  command! -nargs=+ JavaHiLink hi def link <args>
29endif
30
31" some characters that cannot be in a java program (outside a string)
32syn match javaError "[\\@`]"
33syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|[^-]->\|\*\/"
34
35syn match javaOK "\.\.\."
36
37" use separate name so that it can be deleted in javacc.vim
38syn match   javaError2 "#\|=<"
39JavaHiLink javaError2 javaError
40
41
42
43" keyword definitions
44syn keyword javaExternal	native package
45syn match javaExternal		"\<import\>\(\s\+static\>\)\?"
46syn keyword javaError		goto const
47syn keyword javaConditional	if else switch
48syn keyword javaRepeat		while for do
49syn keyword javaBoolean		true false
50syn keyword javaConstant	null
51syn keyword javaTypedef		this super
52syn keyword javaOperator	new instanceof
53syn keyword javaType		boolean char byte short int long float double
54syn keyword javaType		void
55syn keyword javaStatement	return
56syn keyword javaStorageClass	static synchronized transient volatile final strictfp serializable
57syn keyword javaExceptions	throw try catch finally
58syn keyword javaAssert		assert
59syn keyword javaMethodDecl	synchronized throws
60syn keyword javaClassDecl	extends implements interface
61" to differentiate the keyword class from MyClass.class we use a match here
62syn match   javaTypedef		"\.\s*\<class\>"ms=s+1
63syn keyword javaClassDecl	enum
64syn match   javaClassDecl	"^class\>"
65syn match   javaClassDecl	"[^.]\s*\<class\>"ms=s+1
66syn match   javaAnnotation	"@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>"
67syn match   javaClassDecl	"@interface\>"
68syn keyword javaBranch		break continue nextgroup=javaUserLabelRef skipwhite
69syn match   javaUserLabelRef	"\k\+" contained
70syn match   javaVarArg		"\.\.\."
71syn keyword javaScopeDecl	public protected private abstract
72
73if exists("java_highlight_java_lang_ids")
74  let java_highlight_all=1
75endif
76if exists("java_highlight_all")  || exists("java_highlight_java")  || exists("java_highlight_java_lang")
77  " java.lang.*
78  syn match javaLangClass "\<System\>"
79  syn keyword javaR_JavaLang NegativeArraySizeException ArrayStoreException IllegalStateException RuntimeException IndexOutOfBoundsException UnsupportedOperationException ArrayIndexOutOfBoundsException ArithmeticException ClassCastException EnumConstantNotPresentException StringIndexOutOfBoundsException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException NumberFormatException NullPointerException TypeNotPresentException SecurityException
80  syn cluster javaTop add=javaR_JavaLang
81  syn cluster javaClasses add=javaR_JavaLang
82  JavaHiLink javaR_JavaLang javaR_Java
83  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
84  syn cluster javaTop add=javaC_JavaLang
85  syn cluster javaClasses add=javaC_JavaLang
86  JavaHiLink javaC_JavaLang javaC_Java
87  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
88  syn cluster javaTop add=javaE_JavaLang
89  syn cluster javaClasses add=javaE_JavaLang
90  JavaHiLink javaE_JavaLang javaE_Java
91  syn keyword javaX_JavaLang CloneNotSupportedException Exception NoSuchMethodException IllegalAccessException NoSuchFieldException Throwable InterruptedException ClassNotFoundException InstantiationException
92  syn cluster javaTop add=javaX_JavaLang
93  syn cluster javaClasses add=javaX_JavaLang
94  JavaHiLink javaX_JavaLang javaX_Java
95
96  JavaHiLink javaR_Java javaR_
97  JavaHiLink javaC_Java javaC_
98  JavaHiLink javaE_Java javaE_
99  JavaHiLink javaX_Java javaX_
100  JavaHiLink javaX_		     javaExceptions
101  JavaHiLink javaR_		     javaExceptions
102  JavaHiLink javaE_		     javaExceptions
103  JavaHiLink javaC_		     javaConstant
104
105  syn keyword javaLangObject clone equals finalize getClass hashCode
106  syn keyword javaLangObject notify notifyAll toString wait
107  JavaHiLink javaLangObject		     javaConstant
108  syn cluster javaTop add=javaLangObject
109endif
110
111if filereadable(expand("<sfile>:p:h")."/javaid.vim")
112  source <sfile>:p:h/javaid.vim
113endif
114
115if exists("java_space_errors")
116  if !exists("java_no_trail_space_error")
117    syn match	javaSpaceError	"\s\+$"
118  endif
119  if !exists("java_no_tab_space_error")
120    syn match	javaSpaceError	" \+\t"me=e-1
121  endif
122endif
123
124syn region  javaLabelRegion	transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter
125syn match   javaUserLabel	"^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
126syn keyword javaLabel		default
127
128" highlighting C++ keywords as errors removed, too many people find it
129" annoying.  Was: if !exists("java_allow_cpp_keywords")
130
131" The following cluster contains all java groups except the contained ones
132syn 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
133
134
135" Comments
136syn keyword javaTodo		 contained TODO FIXME XXX
137if exists("java_comment_strings")
138  syn region  javaCommentString    contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
139  syn region  javaComment2String   contained start=+"+	end=+$\|"+  contains=javaSpecial,javaSpecialChar,@Spell
140  syn match   javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
141  syn match   javaCommentCharacter contained "'\\''" contains=javaSpecialChar
142  syn match   javaCommentCharacter contained "'[^\\]'"
143  syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
144  syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
145endif
146syn region  javaComment		 start="/\*"  end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
147syn match   javaCommentStar	 contained "^\s*\*[^/]"me=e-1
148syn match   javaCommentStar	 contained "^\s*\*$"
149syn match   javaLineComment	 "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
150JavaHiLink javaCommentString javaString
151JavaHiLink javaComment2String javaString
152JavaHiLink javaCommentCharacter javaCharacter
153
154syn cluster javaTop add=javaComment,javaLineComment
155
156if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
157  syntax case ignore
158  " syntax coloring for javadoc comments (HTML)
159  syntax include @javaHtml <sfile>:p:h/html.vim
160  unlet b:current_syntax
161  " HTML enables spell checking for all text that is not in a syntax item. This
162  " is wrong for Java (all identifiers would be spell-checked), so it's undone
163  " here.
164  syntax spell default
165
166  syn region  javaDocComment	start="/\*\*"  end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
167  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
168
169  syn region javaDocTags	 contained start="{@\(code\|link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
170  syn match  javaDocTags	 contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
171  syn match  javaDocParam	 contained "\s\S\+"
172  syn match  javaDocTags	 contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
173  syn region javaDocSeeTag	 contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
174  syn match  javaDocSeeTagParam  contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
175  syntax case match
176endif
177
178" match the special comment /**/
179syn match   javaComment		 "/\*\*/"
180
181" Strings and constants
182syn match   javaSpecialError	 contained "\\."
183syn match   javaSpecialCharError contained "[^']"
184syn match   javaSpecialChar	 contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
185syn region  javaString		start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
186" next line disabled, it can cause a crash for a long line
187"syn match   javaStringError	  +"\([^"\\]\|\\.\)*$+
188syn match   javaCharacter	 "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
189syn match   javaCharacter	 "'\\''" contains=javaSpecialChar
190syn match   javaCharacter	 "'[^\\]'"
191syn match   javaNumber		 "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
192syn match   javaNumber		 "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
193syn match   javaNumber		 "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
194syn match   javaNumber		 "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
195
196" unicode characters
197syn match   javaSpecial "\\u\d\{4\}"
198
199syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
200
201if exists("java_highlight_functions")
202  if java_highlight_functions == "indent"
203    syn match  javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
204    syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
205    syn match  javaFuncDef "^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
206    syn region javaFuncDef start=+^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
207  else
208    " This line catches method declarations at any indentation>0, but it assumes
209    " two things:
210    "	1. class names are always capitalized (ie: Button)
211    "	2. method names are never capitalized (except constructors, of course)
212    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
213  endif
214  syn match  javaBraces  "[{}]"
215  syn cluster javaTop add=javaFuncDef,javaBraces
216endif
217
218if exists("java_highlight_debug")
219
220  " Strings and constants
221  syn match   javaDebugSpecial		contained "\\\d\d\d\|\\."
222  syn region  javaDebugString		contained start=+"+  end=+"+  contains=javaDebugSpecial
223  syn match   javaDebugStringError	+"\([^"\\]\|\\.\)*$+
224  syn match   javaDebugCharacter	contained "'[^\\]'"
225  syn match   javaDebugSpecialCharacter contained "'\\.'"
226  syn match   javaDebugSpecialCharacter contained "'\\''"
227  syn match   javaDebugNumber		contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
228  syn match   javaDebugNumber		contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
229  syn match   javaDebugNumber		contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
230  syn match   javaDebugNumber		contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
231  syn keyword javaDebugBoolean		contained true false
232  syn keyword javaDebugType		contained null this super
233  syn region javaDebugParen  start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
234
235  " to make this work you must define the highlighting for these groups
236  syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
237  syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
238  syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
239  syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
240
241  syn cluster javaTop add=javaDebug
242
243  if version >= 508 || !exists("did_c_syn_inits")
244    JavaHiLink javaDebug		 Debug
245    JavaHiLink javaDebugString		 DebugString
246    JavaHiLink javaDebugStringError	 javaError
247    JavaHiLink javaDebugType		 DebugType
248    JavaHiLink javaDebugBoolean		 DebugBoolean
249    JavaHiLink javaDebugNumber		 Debug
250    JavaHiLink javaDebugSpecial		 DebugSpecial
251    JavaHiLink javaDebugSpecialCharacter DebugSpecial
252    JavaHiLink javaDebugCharacter	 DebugString
253    JavaHiLink javaDebugParen		 Debug
254
255    JavaHiLink DebugString		 String
256    JavaHiLink DebugSpecial		 Special
257    JavaHiLink DebugBoolean		 Boolean
258    JavaHiLink DebugType		 Type
259  endif
260endif
261
262if exists("java_mark_braces_in_parens_as_errors")
263  syn match javaInParen		 contained "[{}]"
264  JavaHiLink javaInParen	javaError
265  syn cluster javaTop add=javaInParen
266endif
267
268" catch errors caused by wrong parenthesis
269syn region  javaParenT	transparent matchgroup=javaParen  start="("  end=")" contains=@javaTop,javaParenT1
270syn region  javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
271syn region  javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT  contained
272syn match   javaParenError	 ")"
273" catch errors caused by wrong square parenthesis
274syn region  javaParenT	transparent matchgroup=javaParen  start="\["  end="\]" contains=@javaTop,javaParenT1
275syn region  javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
276syn region  javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT  contained
277syn match   javaParenError	 "\]"
278
279JavaHiLink javaParenError	javaError
280
281if !exists("java_minlines")
282  let java_minlines = 10
283endif
284exec "syn sync ccomment javaComment minlines=" . java_minlines
285
286" The default highlighting.
287if version >= 508 || !exists("did_java_syn_inits")
288  if version < 508
289    let did_java_syn_inits = 1
290  endif
291  JavaHiLink javaFuncDef		Function
292  JavaHiLink javaVarArg			Function
293  JavaHiLink javaBraces			Function
294  JavaHiLink javaBranch			Conditional
295  JavaHiLink javaUserLabelRef		javaUserLabel
296  JavaHiLink javaLabel			Label
297  JavaHiLink javaUserLabel		Label
298  JavaHiLink javaConditional		Conditional
299  JavaHiLink javaRepeat			Repeat
300  JavaHiLink javaExceptions		Exception
301  JavaHiLink javaAssert			Statement
302  JavaHiLink javaStorageClass		StorageClass
303  JavaHiLink javaMethodDecl		javaStorageClass
304  JavaHiLink javaClassDecl		javaStorageClass
305  JavaHiLink javaScopeDecl		javaStorageClass
306  JavaHiLink javaBoolean		Boolean
307  JavaHiLink javaSpecial		Special
308  JavaHiLink javaSpecialError		Error
309  JavaHiLink javaSpecialCharError	Error
310  JavaHiLink javaString			String
311  JavaHiLink javaCharacter		Character
312  JavaHiLink javaSpecialChar		SpecialChar
313  JavaHiLink javaNumber			Number
314  JavaHiLink javaError			Error
315  JavaHiLink javaStringError		Error
316  JavaHiLink javaStatement		Statement
317  JavaHiLink javaOperator		Operator
318  JavaHiLink javaComment		Comment
319  JavaHiLink javaDocComment		Comment
320  JavaHiLink javaLineComment		Comment
321  JavaHiLink javaConstant		Constant
322  JavaHiLink javaTypedef		Typedef
323  JavaHiLink javaTodo			Todo
324  JavaHiLink javaAnnotation		PreProc
325
326  JavaHiLink javaCommentTitle		SpecialComment
327  JavaHiLink javaDocTags		Special
328  JavaHiLink javaDocParam		Function
329  JavaHiLink javaDocSeeTagParam		Function
330  JavaHiLink javaCommentStar		javaComment
331
332  JavaHiLink javaType			Type
333  JavaHiLink javaExternal		Include
334
335  JavaHiLink htmlComment		Special
336  JavaHiLink htmlCommentPart		Special
337  JavaHiLink javaSpaceError		Error
338endif
339
340delcommand JavaHiLink
341
342let b:current_syntax = "java"
343
344if main_syntax == 'java'
345  unlet main_syntax
346endif
347
348let b:spell_options="contained"
349let &cpo = s:cpo_save
350unlet s:cpo_save
351
352" vim: ts=8
353