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