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