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