xref: /vim-8.2.3635/runtime/syntax/java.vim (revision dfccaf0f)
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:  2004 Nov 12
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'
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 keyword javaBranch		break continue nextgroup=javaUserLabelRef skipwhite
62syn match   javaUserLabelRef	"\k\+" contained
63syn keyword javaScopeDecl	public protected private abstract
64
65if exists("java_highlight_java_lang_ids") || exists("java_highlight_java_lang") || exists("java_highlight_all")
66  " java.lang.*
67  syn match javaLangClass "\<System\>"
68  syn keyword javaLangClass  Cloneable Comparable Runnable Boolean Byte Class
69  syn keyword javaLangClass  Character CharSequence ClassLoader Compiler Double Float
70  syn keyword javaLangClass  Integer InheritableThreadLocal Long Math Number Object Package Process
71  syn keyword javaLangClass  Runtime RuntimePermission InheritableThreadLocal
72  syn keyword javaLangClass  SecurityManager Short String StrictMath StackTraceElement
73  syn keyword javaLangClass  StringBuffer Thread ThreadGroup
74  syn keyword javaLangClass  ThreadLocal Throwable Void ArithmeticException
75  syn keyword javaLangClass  ArrayIndexOutOfBoundsException AssertionError
76  syn keyword javaLangClass  ArrayStoreException ClassCastException
77  syn keyword javaLangClass  ClassNotFoundException
78  syn keyword javaLangClass  CloneNotSupportedException Exception
79  syn keyword javaLangClass  IllegalAccessException
80  syn keyword javaLangClass  IllegalArgumentException
81  syn keyword javaLangClass  IllegalMonitorStateException
82  syn keyword javaLangClass  IllegalStateException
83  syn keyword javaLangClass  IllegalThreadStateException
84  syn keyword javaLangClass  IndexOutOfBoundsException
85  syn keyword javaLangClass  InstantiationException InterruptedException
86  syn keyword javaLangClass  NegativeArraySizeException NoSuchFieldException
87  syn keyword javaLangClass  NoSuchMethodException NullPointerException
88  syn keyword javaLangClass  NumberFormatException RuntimeException
89  syn keyword javaLangClass  SecurityException StringIndexOutOfBoundsException
90  syn keyword javaLangClass  UnsupportedOperationException
91  syn keyword javaLangClass  AbstractMethodError ClassCircularityError
92  syn keyword javaLangClass  ClassFormatError Error ExceptionInInitializerError
93  syn keyword javaLangClass  IllegalAccessError InstantiationError
94  syn keyword javaLangClass  IncompatibleClassChangeError InternalError
95  syn keyword javaLangClass  LinkageError NoClassDefFoundError
96  syn keyword javaLangClass  NoSuchFieldError NoSuchMethodError
97  syn keyword javaLangClass  OutOfMemoryError StackOverflowError
98  syn keyword javaLangClass  ThreadDeath UnknownError UnsatisfiedLinkError
99  syn keyword javaLangClass  UnsupportedClassVersionError VerifyError
100  syn keyword javaLangClass  VirtualMachineError
101  syn keyword javaLangObject clone equals finalize getClass hashCode
102  syn keyword javaLangObject notify notifyAll toString wait
103  JavaHiLink javaLangClass		     javaConstant
104  JavaHiLink javaLangObject		     javaConstant
105  syn cluster javaTop add=javaLangObject,javaLangClass
106  syn cluster javaClasses add=javaLangClass
107endif
108
109if filereadable(expand("<sfile>:p:h")."/javaid.vim")
110  source <sfile>:p:h/javaid.vim
111endif
112
113if exists("java_space_errors")
114  if !exists("java_no_trail_space_error")
115    syn match   javaSpaceError  "\s\+$"
116  endif
117  if !exists("java_no_tab_space_error")
118    syn match   javaSpaceError  " \+\t"me=e-1
119  endif
120endif
121
122syn region  javaLabelRegion     transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter
123syn match   javaUserLabel       "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
124syn keyword javaLabel		default
125
126if !exists("java_allow_cpp_keywords")
127  syn keyword javaError auto delete extern friend inline redeclared
128  syn keyword javaError register signed sizeof struct template typedef union
129  syn keyword javaError unsigned operator
130endif
131
132" The following cluster contains all java groups except the contained ones
133syn 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
134
135
136" Comments
137syn keyword javaTodo		 contained TODO FIXME XXX
138if exists("java_comment_strings")
139  syn region  javaCommentString    contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
140  syn region  javaComment2String   contained start=+"+  end=+$\|"+  contains=javaSpecial,javaSpecialChar,@Spell
141  syn match   javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
142  syn match   javaCommentCharacter contained "'\\''" contains=javaSpecialChar
143  syn match   javaCommentCharacter contained "'[^\\]'"
144  syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
145  syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
146endif
147syn region  javaComment		 start="/\*"  end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
148syn match   javaCommentStar      contained "^\s*\*[^/]"me=e-1
149syn match   javaCommentStar      contained "^\s*\*$"
150syn match   javaLineComment      "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
151JavaHiLink javaCommentString javaString
152JavaHiLink javaComment2String javaString
153JavaHiLink javaCommentCharacter javaCharacter
154
155syn cluster javaTop add=javaComment,javaLineComment
156
157if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
158  syntax case ignore
159  " syntax coloring for javadoc comments (HTML)
160  syntax include @javaHtml <sfile>:p:h/html.vim
161  unlet b:current_syntax
162  syn region  javaDocComment    start="/\*\*"  end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaTodo,@Spell
163  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
164
165  syn region javaDocTags  contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
166  syn match  javaDocTags  contained "@\(see\|param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
167  syn match  javaDocParam contained "\s\S\+"
168  syn match  javaDocTags  contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
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[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
186syn match   javaNumber		 "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
187syn match   javaNumber		 "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
188syn match   javaNumber		 "\<\d\+\([eE][-+]\=\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
198    syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
199    syn match  javaFuncDef "^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
200    syn region javaFuncDef start=+^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
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  endif
208  syn match  javaBraces  "[{}]"
209  syn cluster javaTop add=javaFuncDef,javaBraces
210endif
211
212if exists("java_highlight_debug")
213
214  " Strings and constants
215  syn match   javaDebugSpecial		contained "\\\d\d\d\|\\."
216  syn region  javaDebugString		contained start=+"+  end=+"+  contains=javaDebugSpecial
217  syn match   javaDebugStringError      +"\([^"\\]\|\\.\)*$+
218  syn match   javaDebugCharacter	contained "'[^\\]'"
219  syn match   javaDebugSpecialCharacter contained "'\\.'"
220  syn match   javaDebugSpecialCharacter contained "'\\''"
221  syn match   javaDebugNumber		contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
222  syn match   javaDebugNumber		contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
223  syn match   javaDebugNumber		contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
224  syn match   javaDebugNumber		contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
225  syn keyword javaDebugBoolean		contained true false
226  syn keyword javaDebugType		contained null this super
227  syn region javaDebugParen  start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
228
229  " to make this work you must define the highlighting for these groups
230  syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
231  syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
232  syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
233  syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
234
235  syn cluster javaTop add=javaDebug
236
237  if version >= 508 || !exists("did_c_syn_inits")
238    JavaHiLink javaDebug		 Debug
239    JavaHiLink javaDebugString		 DebugString
240    JavaHiLink javaDebugStringError	 javaError
241    JavaHiLink javaDebugType		 DebugType
242    JavaHiLink javaDebugBoolean		 DebugBoolean
243    JavaHiLink javaDebugNumber		 Debug
244    JavaHiLink javaDebugSpecial		 DebugSpecial
245    JavaHiLink javaDebugSpecialCharacter DebugSpecial
246    JavaHiLink javaDebugCharacter	 DebugString
247    JavaHiLink javaDebugParen		 Debug
248
249    JavaHiLink DebugString		 String
250    JavaHiLink DebugSpecial		 Special
251    JavaHiLink DebugBoolean		 Boolean
252    JavaHiLink DebugType		 Type
253  endif
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_minlines")
276  let java_minlines = 10
277endif
278exec "syn sync ccomment javaComment minlines=" . java_minlines
279
280" The default highlighting.
281if version >= 508 || !exists("did_java_syn_inits")
282  if version < 508
283    let did_java_syn_inits = 1
284  endif
285  JavaHiLink javaFuncDef		Function
286  JavaHiLink javaBraces			Function
287  JavaHiLink javaBranch			Conditional
288  JavaHiLink javaUserLabelRef		javaUserLabel
289  JavaHiLink javaLabel			Label
290  JavaHiLink javaUserLabel		Label
291  JavaHiLink javaConditional		Conditional
292  JavaHiLink javaRepeat			Repeat
293  JavaHiLink javaExceptions		Exception
294  JavaHiLink javaAssert			Statement
295  JavaHiLink javaStorageClass		StorageClass
296  JavaHiLink javaMethodDecl		javaStorageClass
297  JavaHiLink javaClassDecl		javaStorageClass
298  JavaHiLink javaScopeDecl		javaStorageClass
299  JavaHiLink javaBoolean		Boolean
300  JavaHiLink javaSpecial		Special
301  JavaHiLink javaSpecialError		Error
302  JavaHiLink javaSpecialCharError	Error
303  JavaHiLink javaString			String
304  JavaHiLink javaCharacter		Character
305  JavaHiLink javaSpecialChar		SpecialChar
306  JavaHiLink javaNumber			Number
307  JavaHiLink javaError			Error
308  JavaHiLink javaStringError		Error
309  JavaHiLink javaStatement		Statement
310  JavaHiLink javaOperator		Operator
311  JavaHiLink javaComment		Comment
312  JavaHiLink javaDocComment		Comment
313  JavaHiLink javaLineComment		Comment
314  JavaHiLink javaConstant		Constant
315  JavaHiLink javaTypedef		Typedef
316  JavaHiLink javaTodo			Todo
317
318  JavaHiLink javaCommentTitle		SpecialComment
319  JavaHiLink javaDocTags		Special
320  JavaHiLink javaDocParam		Function
321  JavaHiLink javaCommentStar		javaComment
322
323  JavaHiLink javaType			Type
324  JavaHiLink javaExternal		Include
325
326  JavaHiLink htmlComment		Special
327  JavaHiLink htmlCommentPart		Special
328  JavaHiLink javaSpaceError		Error
329endif
330
331delcommand JavaHiLink
332
333let b:current_syntax = "java"
334
335if main_syntax == 'java'
336  unlet main_syntax
337endif
338
339let b:spell_options="contained"
340
341" vim: ts=8
342