xref: /vim-8.2.3635/runtime/syntax/java.vim (revision 6c35beaa)
1" Vim syntax file " Language:	  Java
2" Maintainer:	Claudio Fleiner <[email protected]>
3" URL:		http://www.fleiner.com/vim/syntax/java.vim
4" Last Change:	2011 Dec 30
5
6" Please check :help java.vim for comments on some of the options available.
7
8" Quit when a syntax file was already loaded
9if !exists("main_syntax")
10  if version < 600
11    syntax clear
12  elseif exists("b:current_syntax")
13    finish
14  endif
15  " we define it here so that included files can test for it
16  let main_syntax='java'
17  syn region javaFold start="{" end="}" transparent fold
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]*\.\)*[_$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")
69  let java_highlight_all=1
70endif
71if exists("java_highlight_all")  || exists("java_highlight_java")  || exists("java_highlight_java_lang")
72  " java.lang.*
73  syn match javaLangClass "\<System\>"
74  syn keyword javaR_JavaLang NegativeArraySizeException ArrayStoreException IllegalStateException RuntimeException IndexOutOfBoundsException UnsupportedOperationException ArrayIndexOutOfBoundsException ArithmeticException ClassCastException EnumConstantNotPresentException StringIndexOutOfBoundsException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException NumberFormatException NullPointerException TypeNotPresentException SecurityException
75  syn cluster javaTop add=javaR_JavaLang
76  syn cluster javaClasses add=javaR_JavaLang
77  JavaHiLink javaR_JavaLang javaR_Java
78  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
79  syn cluster javaTop add=javaC_JavaLang
80  syn cluster javaClasses add=javaC_JavaLang
81  JavaHiLink javaC_JavaLang javaC_Java
82  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
83  syn cluster javaTop add=javaE_JavaLang
84  syn cluster javaClasses add=javaE_JavaLang
85  JavaHiLink javaE_JavaLang javaE_Java
86  syn keyword javaX_JavaLang CloneNotSupportedException Exception NoSuchMethodException IllegalAccessException NoSuchFieldException Throwable InterruptedException ClassNotFoundException InstantiationException
87  syn cluster javaTop add=javaX_JavaLang
88  syn cluster javaClasses add=javaX_JavaLang
89  JavaHiLink javaX_JavaLang javaX_Java
90
91  JavaHiLink javaR_Java javaR_
92  JavaHiLink javaC_Java javaC_
93  JavaHiLink javaE_Java javaE_
94  JavaHiLink javaX_Java javaX_
95  JavaHiLink javaX_		     javaExceptions
96  JavaHiLink javaR_		     javaExceptions
97  JavaHiLink javaE_		     javaExceptions
98  JavaHiLink javaC_		     javaConstant
99
100  syn keyword javaLangObject clone equals finalize getClass hashCode
101  syn keyword javaLangObject notify notifyAll toString wait
102  JavaHiLink javaLangObject		     javaConstant
103  syn cluster javaTop add=javaLangObject
104endif
105
106if filereadable(expand("<sfile>:p:h")."/javaid.vim")
107  source <sfile>:p:h/javaid.vim
108endif
109
110if exists("java_space_errors")
111  if !exists("java_no_trail_space_error")
112    syn match	javaSpaceError	"\s\+$"
113  endif
114  if !exists("java_no_tab_space_error")
115    syn match	javaSpaceError	" \+\t"me=e-1
116  endif
117endif
118
119syn region  javaLabelRegion	transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter
120syn match   javaUserLabel	"^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
121syn keyword javaLabel		default
122
123" highlighting C++ keywords as errors removed, too many people find it
124" annoying.  Was: if !exists("java_allow_cpp_keywords")
125
126" The following cluster contains all java groups except the contained ones
127syn 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
128
129
130" Comments
131syn keyword javaTodo		 contained TODO FIXME XXX
132if exists("java_comment_strings")
133  syn region  javaCommentString    contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
134  syn region  javaComment2String   contained start=+"+	end=+$\|"+  contains=javaSpecial,javaSpecialChar,@Spell
135  syn match   javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
136  syn match   javaCommentCharacter contained "'\\''" contains=javaSpecialChar
137  syn match   javaCommentCharacter contained "'[^\\]'"
138  syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
139  syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
140endif
141syn region  javaComment		 start="/\*"  end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
142syn match   javaCommentStar	 contained "^\s*\*[^/]"me=e-1
143syn match   javaCommentStar	 contained "^\s*\*$"
144syn match   javaLineComment	 "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
145JavaHiLink javaCommentString javaString
146JavaHiLink javaComment2String javaString
147JavaHiLink javaCommentCharacter javaCharacter
148
149syn cluster javaTop add=javaComment,javaLineComment
150
151if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
152  syntax case ignore
153  " syntax coloring for javadoc comments (HTML)
154  syntax include @javaHtml <sfile>:p:h/html.vim
155  unlet b:current_syntax
156  " HTML enables spell checking for all text that is not in a syntax item. This
157  " is wrong for Java (all identifiers would be spell-checked), so it's undone
158  " here.
159  syntax spell default
160
161  syn region  javaDocComment	start="/\*\*"  end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
162  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
163
164  syn region javaDocTags	 contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
165  syn match  javaDocTags	 contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
166  syn match  javaDocParam	 contained "\s\S\+"
167  syn match  javaDocTags	 contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
168  syn region javaDocSeeTag	 contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
169  syn match  javaDocSeeTagParam  contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
170  syntax case match
171endif
172
173" match the special comment /**/
174syn match   javaComment		 "/\*\*/"
175
176" Strings and constants
177syn match   javaSpecialError	 contained "\\."
178syn match   javaSpecialCharError contained "[^']"
179syn match   javaSpecialChar	 contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
180syn region  javaString		start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
181" next line disabled, it can cause a crash for a long line
182"syn match   javaStringError	  +"\([^"\\]\|\\.\)*$+
183syn match   javaCharacter	 "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
184syn match   javaCharacter	 "'\\''" contains=javaSpecialChar
185syn match   javaCharacter	 "'[^\\]'"
186syn match   javaNumber		 "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
187syn match   javaNumber		 "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
188syn match   javaNumber		 "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
189syn match   javaNumber		 "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
190
191" unicode characters
192syn match   javaSpecial "\\u\d\{4\}"
193
194syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
195
196if exists("java_highlight_functions")
197  if java_highlight_functions == "indent"
198    syn match  javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
199    syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
200    syn match  javaFuncDef "^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
201    syn region javaFuncDef start=+^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
202  else
203    " This line catches method declarations at any indentation>0, but it assumes
204    " two things:
205    "	1. class names are always capitalized (ie: Button)
206    "	2. method names are never capitalized (except constructors, of course)
207    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
208  endif
209  syn match  javaBraces  "[{}]"
210  syn cluster javaTop add=javaFuncDef,javaBraces
211endif
212
213if exists("java_highlight_debug")
214
215  " Strings and constants
216  syn match   javaDebugSpecial		contained "\\\d\d\d\|\\."
217  syn region  javaDebugString		contained start=+"+  end=+"+  contains=javaDebugSpecial
218  syn match   javaDebugStringError	+"\([^"\\]\|\\.\)*$+
219  syn match   javaDebugCharacter	contained "'[^\\]'"
220  syn match   javaDebugSpecialCharacter contained "'\\.'"
221  syn match   javaDebugSpecialCharacter contained "'\\''"
222  syn match   javaDebugNumber		contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
223  syn match   javaDebugNumber		contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
224  syn match   javaDebugNumber		contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
225  syn match   javaDebugNumber		contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
226  syn keyword javaDebugBoolean		contained true false
227  syn keyword javaDebugType		contained null this super
228  syn region javaDebugParen  start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
229
230  " to make this work you must define the highlighting for these groups
231  syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
232  syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
233  syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
234  syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
235
236  syn cluster javaTop add=javaDebug
237
238  if version >= 508 || !exists("did_c_syn_inits")
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
254  endif
255endif
256
257if exists("java_mark_braces_in_parens_as_errors")
258  syn match javaInParen		 contained "[{}]"
259  JavaHiLink javaInParen	javaError
260  syn cluster javaTop add=javaInParen
261endif
262
263" catch errors caused by wrong parenthesis
264syn region  javaParenT	transparent matchgroup=javaParen  start="("  end=")" contains=@javaTop,javaParenT1
265syn region  javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
266syn region  javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT  contained
267syn match   javaParenError	 ")"
268" catch errors caused by wrong square 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
274JavaHiLink javaParenError	javaError
275
276if !exists("java_minlines")
277  let java_minlines = 10
278endif
279exec "syn sync ccomment javaComment minlines=" . java_minlines
280
281" The default highlighting.
282if version >= 508 || !exists("did_java_syn_inits")
283  if version < 508
284    let did_java_syn_inits = 1
285  endif
286  JavaHiLink javaFuncDef		Function
287  JavaHiLink javaVarArg			Function
288  JavaHiLink javaBraces			Function
289  JavaHiLink javaBranch			Conditional
290  JavaHiLink javaUserLabelRef		javaUserLabel
291  JavaHiLink javaLabel			Label
292  JavaHiLink javaUserLabel		Label
293  JavaHiLink javaConditional		Conditional
294  JavaHiLink javaRepeat			Repeat
295  JavaHiLink javaExceptions		Exception
296  JavaHiLink javaAssert			Statement
297  JavaHiLink javaStorageClass		StorageClass
298  JavaHiLink javaMethodDecl		javaStorageClass
299  JavaHiLink javaClassDecl		javaStorageClass
300  JavaHiLink javaScopeDecl		javaStorageClass
301  JavaHiLink javaBoolean		Boolean
302  JavaHiLink javaSpecial		Special
303  JavaHiLink javaSpecialError		Error
304  JavaHiLink javaSpecialCharError	Error
305  JavaHiLink javaString			String
306  JavaHiLink javaCharacter		Character
307  JavaHiLink javaSpecialChar		SpecialChar
308  JavaHiLink javaNumber			Number
309  JavaHiLink javaError			Error
310  JavaHiLink javaStringError		Error
311  JavaHiLink javaStatement		Statement
312  JavaHiLink javaOperator		Operator
313  JavaHiLink javaComment		Comment
314  JavaHiLink javaDocComment		Comment
315  JavaHiLink javaLineComment		Comment
316  JavaHiLink javaConstant		Constant
317  JavaHiLink javaTypedef		Typedef
318  JavaHiLink javaTodo			Todo
319  JavaHiLink javaAnnotation		PreProc
320
321  JavaHiLink javaCommentTitle		SpecialComment
322  JavaHiLink javaDocTags		Special
323  JavaHiLink javaDocParam		Function
324  JavaHiLink javaDocSeeTagParam		Function
325  JavaHiLink javaCommentStar		javaComment
326
327  JavaHiLink javaType			Type
328  JavaHiLink javaExternal		Include
329
330  JavaHiLink htmlComment		Special
331  JavaHiLink htmlCommentPart		Special
332  JavaHiLink javaSpaceError		Error
333endif
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"
344
345" vim: ts=8
346