xref: /vim-8.2.3635/runtime/syntax/java.vim (revision 071d4279)
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 Apr 23
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 "[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  if version >= 508 || !exists("did_c_syn_inits")
237    JavaHiLink javaDebug		 Debug
238    JavaHiLink javaDebugString		 DebugString
239    JavaHiLink javaDebugStringError	 javaError
240    JavaHiLink javaDebugType		 DebugType
241    JavaHiLink javaDebugBoolean		 DebugBoolean
242    JavaHiLink javaDebugNumber		 Debug
243    JavaHiLink javaDebugSpecial		 DebugSpecial
244    JavaHiLink javaDebugSpecialCharacter DebugSpecial
245    JavaHiLink javaDebugCharacter	 DebugString
246    JavaHiLink javaDebugParen		 Debug
247
248    JavaHiLink DebugString		 String
249    JavaHiLink DebugSpecial		 Special
250    JavaHiLink DebugBoolean		 Boolean
251    JavaHiLink DebugType		 Type
252  endif
253endif
254
255if exists("java_mark_braces_in_parens_as_errors")
256  syn match javaInParen		 contained "[{}]"
257  JavaHiLink javaInParen	javaError
258  syn cluster javaTop add=javaInParen
259endif
260
261" catch errors caused by wrong parenthesis
262syn region  javaParenT  transparent matchgroup=javaParen  start="("  end=")" contains=@javaTop,javaParenT1
263syn region  javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
264syn region  javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT  contained
265syn match   javaParenError       ")"
266JavaHiLink javaParenError       javaError
267
268if !exists("java_minlines")
269  let java_minlines = 10
270endif
271exec "syn sync ccomment javaComment minlines=" . java_minlines
272
273" The default highlighting.
274if version >= 508 || !exists("did_java_syn_inits")
275  if version < 508
276    let did_java_syn_inits = 1
277  endif
278  JavaHiLink javaFuncDef		Function
279  JavaHiLink javaBraces			Function
280  JavaHiLink javaBranch			Conditional
281  JavaHiLink javaUserLabelRef		javaUserLabel
282  JavaHiLink javaLabel			Label
283  JavaHiLink javaUserLabel		Label
284  JavaHiLink javaConditional		Conditional
285  JavaHiLink javaRepeat			Repeat
286  JavaHiLink javaExceptions		Exception
287  JavaHiLink javaAssert			Statement
288  JavaHiLink javaStorageClass		StorageClass
289  JavaHiLink javaMethodDecl		javaStorageClass
290  JavaHiLink javaClassDecl		javaStorageClass
291  JavaHiLink javaScopeDecl		javaStorageClass
292  JavaHiLink javaBoolean		Boolean
293  JavaHiLink javaSpecial		Special
294  JavaHiLink javaSpecialError		Error
295  JavaHiLink javaSpecialCharError	Error
296  JavaHiLink javaString			String
297  JavaHiLink javaCharacter		Character
298  JavaHiLink javaSpecialChar		SpecialChar
299  JavaHiLink javaNumber			Number
300  JavaHiLink javaError			Error
301  JavaHiLink javaStringError		Error
302  JavaHiLink javaStatement		Statement
303  JavaHiLink javaOperator		Operator
304  JavaHiLink javaComment		Comment
305  JavaHiLink javaDocComment		Comment
306  JavaHiLink javaLineComment		Comment
307  JavaHiLink javaConstant		Constant
308  JavaHiLink javaTypedef		Typedef
309  JavaHiLink javaTodo			Todo
310
311  JavaHiLink javaCommentTitle		SpecialComment
312  JavaHiLink javaDocTags		Special
313  JavaHiLink javaDocParam		Function
314  JavaHiLink javaCommentStar		javaComment
315
316  JavaHiLink javaType			Type
317  JavaHiLink javaExternal		Include
318
319  JavaHiLink htmlComment		Special
320  JavaHiLink htmlCommentPart		Special
321  JavaHiLink javaSpaceError		Error
322endif
323
324delcommand JavaHiLink
325
326let b:current_syntax = "java"
327
328if main_syntax == 'java'
329  unlet main_syntax
330endif
331
332let b:spell_options="contained"
333
334" vim: ts=8
335