xref: /vim-8.2.3635/runtime/syntax/java.vim (revision 24db7295)
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 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]*\>\(([^)]*)\)\=" contains=javaString
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,javaString
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[bB][0-1]\+\|0[0-7]*\|0[xX]\x\+\|\d\(\d\|_\d\)*\)[lL]\=\>"
192syn match   javaNumber		 "\(\<\d\(\d\|_\d\)*\.\(\d\(\d\|_\d\)*\)\=\|\.\d\(\d\|_\d\)*\)\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\="
193syn match   javaNumber		 "\<\d\(\d\|_\d\)*[eE][-+]\=\d\(\d\|_\d\)*[fFdD]\=\>"
194syn match   javaNumber		 "\<\d\(\d\|_\d\)*\([eE][-+]\=\d\(\d\|_\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,javaAnnotation
204    syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
205    syn match  javaFuncDef "^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
206    syn region javaFuncDef start=+^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
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    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
214  endif
215  syn match javaLambdaDef "[a-zA-Z_][a-zA-Z0-9_]*\s*->"
216  syn match  javaBraces  "[{}]"
217  syn cluster javaTop add=javaFuncDef,javaBraces,javaLambdaDef
218endif
219
220if exists("java_highlight_debug")
221
222  " Strings and constants
223  syn match   javaDebugSpecial		contained "\\\d\d\d\|\\."
224  syn region  javaDebugString		contained start=+"+  end=+"+  contains=javaDebugSpecial
225  syn match   javaDebugStringError	+"\([^"\\]\|\\.\)*$+
226  syn match   javaDebugCharacter	contained "'[^\\]'"
227  syn match   javaDebugSpecialCharacter contained "'\\.'"
228  syn match   javaDebugSpecialCharacter contained "'\\''"
229  syn match   javaDebugNumber		contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
230  syn match   javaDebugNumber		contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
231  syn match   javaDebugNumber		contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
232  syn match   javaDebugNumber		contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
233  syn keyword javaDebugBoolean		contained true false
234  syn keyword javaDebugType		contained null this super
235  syn region javaDebugParen  start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
236
237  " to make this work you must define the highlighting for these groups
238  syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
239  syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
240  syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
241  syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
242
243  syn cluster javaTop add=javaDebug
244
245  if version >= 508 || !exists("did_c_syn_inits")
246    JavaHiLink javaDebug		 Debug
247    JavaHiLink javaDebugString		 DebugString
248    JavaHiLink javaDebugStringError	 javaError
249    JavaHiLink javaDebugType		 DebugType
250    JavaHiLink javaDebugBoolean		 DebugBoolean
251    JavaHiLink javaDebugNumber		 Debug
252    JavaHiLink javaDebugSpecial		 DebugSpecial
253    JavaHiLink javaDebugSpecialCharacter DebugSpecial
254    JavaHiLink javaDebugCharacter	 DebugString
255    JavaHiLink javaDebugParen		 Debug
256
257    JavaHiLink DebugString		 String
258    JavaHiLink DebugSpecial		 Special
259    JavaHiLink DebugBoolean		 Boolean
260    JavaHiLink DebugType		 Type
261  endif
262endif
263
264if exists("java_mark_braces_in_parens_as_errors")
265  syn match javaInParen		 contained "[{}]"
266  JavaHiLink javaInParen	javaError
267  syn cluster javaTop add=javaInParen
268endif
269
270" catch errors caused by wrong 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" catch errors caused by wrong square parenthesis
276syn region  javaParenT	transparent matchgroup=javaParen  start="\[" end="\]" contains=@javaTop,javaParenT1
277syn region  javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
278syn region  javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT  contained
279syn match   javaParenError	 "\]"
280
281JavaHiLink javaParenError	javaError
282
283if exists("java_highlight_functions")
284   syn match javaLambdaDef "([a-zA-Z0-9_<>\[\], \t]*)\s*->"
285   " needs to be defined after the parenthesis error catcher to work
286endif
287
288if !exists("java_minlines")
289  let java_minlines = 10
290endif
291exec "syn sync ccomment javaComment minlines=" . java_minlines
292
293" The default highlighting.
294if version >= 508 || !exists("did_java_syn_inits")
295  if version < 508
296    let did_java_syn_inits = 1
297  endif
298  JavaHiLink javaLambdaDef		Function
299  JavaHiLink javaFuncDef		Function
300  JavaHiLink javaVarArg			Function
301  JavaHiLink javaBraces			Function
302  JavaHiLink javaBranch			Conditional
303  JavaHiLink javaUserLabelRef		javaUserLabel
304  JavaHiLink javaLabel			Label
305  JavaHiLink javaUserLabel		Label
306  JavaHiLink javaConditional		Conditional
307  JavaHiLink javaRepeat			Repeat
308  JavaHiLink javaExceptions		Exception
309  JavaHiLink javaAssert			Statement
310  JavaHiLink javaStorageClass		StorageClass
311  JavaHiLink javaMethodDecl		javaStorageClass
312  JavaHiLink javaClassDecl		javaStorageClass
313  JavaHiLink javaScopeDecl		javaStorageClass
314  JavaHiLink javaBoolean		Boolean
315  JavaHiLink javaSpecial		Special
316  JavaHiLink javaSpecialError		Error
317  JavaHiLink javaSpecialCharError	Error
318  JavaHiLink javaString			String
319  JavaHiLink javaCharacter		Character
320  JavaHiLink javaSpecialChar		SpecialChar
321  JavaHiLink javaNumber			Number
322  JavaHiLink javaError			Error
323  JavaHiLink javaStringError		Error
324  JavaHiLink javaStatement		Statement
325  JavaHiLink javaOperator		Operator
326  JavaHiLink javaComment		Comment
327  JavaHiLink javaDocComment		Comment
328  JavaHiLink javaLineComment		Comment
329  JavaHiLink javaConstant		Constant
330  JavaHiLink javaTypedef		Typedef
331  JavaHiLink javaTodo			Todo
332  JavaHiLink javaAnnotation		PreProc
333
334  JavaHiLink javaCommentTitle		SpecialComment
335  JavaHiLink javaDocTags		Special
336  JavaHiLink javaDocParam		Function
337  JavaHiLink javaDocSeeTagParam		Function
338  JavaHiLink javaCommentStar		javaComment
339
340  JavaHiLink javaType			Type
341  JavaHiLink javaExternal		Include
342
343  JavaHiLink htmlComment		Special
344  JavaHiLink htmlCommentPart		Special
345  JavaHiLink javaSpaceError		Error
346endif
347
348delcommand JavaHiLink
349
350let b:current_syntax = "java"
351
352if main_syntax == 'java'
353  unlet main_syntax
354endif
355
356let b:spell_options="contained"
357let &cpo = s:cpo_save
358unlet s:cpo_save
359
360" vim: ts=8
361