xref: /vim-8.2.3635/runtime/syntax/java.vim (revision f3c2afb7)
10c5fa7d7SBram Moolenaar" Vim syntax file
20c5fa7d7SBram Moolenaar" Language:	Java
3071d4279SBram Moolenaar" Maintainer:	Claudio Fleiner <[email protected]>
4071d4279SBram Moolenaar" URL:		http://www.fleiner.com/vim/syntax/java.vim
5*f3c2afb7SBram Moolenaar" Last Change:	2015 March 01
6071d4279SBram Moolenaar
7071d4279SBram Moolenaar" Please check :help java.vim for comments on some of the options available.
8071d4279SBram Moolenaar
9071d4279SBram Moolenaar" Quit when a syntax file was already loaded
10071d4279SBram Moolenaarif !exists("main_syntax")
11071d4279SBram Moolenaar  if version < 600
12071d4279SBram Moolenaar    syntax clear
13071d4279SBram Moolenaar  elseif exists("b:current_syntax")
14071d4279SBram Moolenaar    finish
15071d4279SBram Moolenaar  endif
16071d4279SBram Moolenaar  " we define it here so that included files can test for it
17071d4279SBram Moolenaar  let main_syntax='java'
185c73622aSBram Moolenaar  syn region javaFold start="{" end="}" transparent fold
19071d4279SBram Moolenaarendif
20071d4279SBram Moolenaar
210c5fa7d7SBram Moolenaarlet s:cpo_save = &cpo
220c5fa7d7SBram Moolenaarset cpo&vim
230c5fa7d7SBram Moolenaar
24071d4279SBram Moolenaar" don't use standard HiLink, it will not work with included syntax files
25071d4279SBram Moolenaarif version < 508
26071d4279SBram Moolenaar  command! -nargs=+ JavaHiLink hi link <args>
27071d4279SBram Moolenaarelse
28071d4279SBram Moolenaar  command! -nargs=+ JavaHiLink hi def link <args>
29071d4279SBram Moolenaarendif
30071d4279SBram Moolenaar
31071d4279SBram Moolenaar" some characters that cannot be in a java program (outside a string)
32071d4279SBram Moolenaarsyn match javaError "[\\@`]"
33*f3c2afb7SBram Moolenaarsyn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/"
340c5fa7d7SBram Moolenaar
35071d4279SBram Moolenaarsyn match javaOK "\.\.\."
36071d4279SBram Moolenaar
37071d4279SBram Moolenaar" use separate name so that it can be deleted in javacc.vim
38071d4279SBram Moolenaarsyn match   javaError2 "#\|=<"
39071d4279SBram MoolenaarJavaHiLink javaError2 javaError
40071d4279SBram Moolenaar
41071d4279SBram Moolenaar
42071d4279SBram Moolenaar
43071d4279SBram Moolenaar" keyword definitions
44071d4279SBram Moolenaarsyn keyword javaExternal	native package
45293ee4d4SBram Moolenaarsyn match javaExternal		"\<import\>\(\s\+static\>\)\?"
46071d4279SBram Moolenaarsyn keyword javaError		goto const
47071d4279SBram Moolenaarsyn keyword javaConditional	if else switch
48071d4279SBram Moolenaarsyn keyword javaRepeat		while for do
49071d4279SBram Moolenaarsyn keyword javaBoolean		true false
50071d4279SBram Moolenaarsyn keyword javaConstant	null
51071d4279SBram Moolenaarsyn keyword javaTypedef		this super
52071d4279SBram Moolenaarsyn keyword javaOperator	new instanceof
53071d4279SBram Moolenaarsyn keyword javaType		boolean char byte short int long float double
54071d4279SBram Moolenaarsyn keyword javaType		void
55071d4279SBram Moolenaarsyn keyword javaStatement	return
56071d4279SBram Moolenaarsyn keyword javaStorageClass	static synchronized transient volatile final strictfp serializable
57071d4279SBram Moolenaarsyn keyword javaExceptions	throw try catch finally
58071d4279SBram Moolenaarsyn keyword javaAssert		assert
59071d4279SBram Moolenaarsyn keyword javaMethodDecl	synchronized throws
60071d4279SBram Moolenaarsyn keyword javaClassDecl	extends implements interface
61071d4279SBram Moolenaar" to differentiate the keyword class from MyClass.class we use a match here
62071d4279SBram Moolenaarsyn match   javaTypedef		"\.\s*\<class\>"ms=s+1
63071d4279SBram Moolenaarsyn keyword javaClassDecl	enum
64071d4279SBram Moolenaarsyn match   javaClassDecl	"^class\>"
65071d4279SBram Moolenaarsyn match   javaClassDecl	"[^.]\s*\<class\>"ms=s+1
66*f3c2afb7SBram Moolenaarsyn match   javaAnnotation	"@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>\(([^)]*)\)\=" contains=javaString
67a5792f58SBram Moolenaarsyn match   javaClassDecl	"@interface\>"
68071d4279SBram Moolenaarsyn keyword javaBranch		break continue nextgroup=javaUserLabelRef skipwhite
69071d4279SBram Moolenaarsyn match   javaUserLabelRef	"\k\+" contained
70a5792f58SBram Moolenaarsyn match   javaVarArg		"\.\.\."
71071d4279SBram Moolenaarsyn keyword javaScopeDecl	public protected private abstract
72071d4279SBram Moolenaar
738ada17c4SBram Moolenaarif exists("java_highlight_java_lang_ids")
748ada17c4SBram Moolenaar  let java_highlight_all=1
758ada17c4SBram Moolenaarendif
768ada17c4SBram Moolenaarif exists("java_highlight_all")  || exists("java_highlight_java")  || exists("java_highlight_java_lang")
77071d4279SBram Moolenaar  " java.lang.*
78071d4279SBram Moolenaar  syn match javaLangClass "\<System\>"
798ada17c4SBram Moolenaar  syn keyword javaR_JavaLang NegativeArraySizeException ArrayStoreException IllegalStateException RuntimeException IndexOutOfBoundsException UnsupportedOperationException ArrayIndexOutOfBoundsException ArithmeticException ClassCastException EnumConstantNotPresentException StringIndexOutOfBoundsException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException NumberFormatException NullPointerException TypeNotPresentException SecurityException
808ada17c4SBram Moolenaar  syn cluster javaTop add=javaR_JavaLang
818ada17c4SBram Moolenaar  syn cluster javaClasses add=javaR_JavaLang
828ada17c4SBram Moolenaar  JavaHiLink javaR_JavaLang javaR_Java
838ada17c4SBram Moolenaar  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
848ada17c4SBram Moolenaar  syn cluster javaTop add=javaC_JavaLang
858ada17c4SBram Moolenaar  syn cluster javaClasses add=javaC_JavaLang
868ada17c4SBram Moolenaar  JavaHiLink javaC_JavaLang javaC_Java
878ada17c4SBram Moolenaar  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
888ada17c4SBram Moolenaar  syn cluster javaTop add=javaE_JavaLang
898ada17c4SBram Moolenaar  syn cluster javaClasses add=javaE_JavaLang
908ada17c4SBram Moolenaar  JavaHiLink javaE_JavaLang javaE_Java
918ada17c4SBram Moolenaar  syn keyword javaX_JavaLang CloneNotSupportedException Exception NoSuchMethodException IllegalAccessException NoSuchFieldException Throwable InterruptedException ClassNotFoundException InstantiationException
928ada17c4SBram Moolenaar  syn cluster javaTop add=javaX_JavaLang
938ada17c4SBram Moolenaar  syn cluster javaClasses add=javaX_JavaLang
948ada17c4SBram Moolenaar  JavaHiLink javaX_JavaLang javaX_Java
958ada17c4SBram Moolenaar
968ada17c4SBram Moolenaar  JavaHiLink javaR_Java javaR_
978ada17c4SBram Moolenaar  JavaHiLink javaC_Java javaC_
988ada17c4SBram Moolenaar  JavaHiLink javaE_Java javaE_
998ada17c4SBram Moolenaar  JavaHiLink javaX_Java javaX_
1008ada17c4SBram Moolenaar  JavaHiLink javaX_		     javaExceptions
1018ada17c4SBram Moolenaar  JavaHiLink javaR_		     javaExceptions
1028ada17c4SBram Moolenaar  JavaHiLink javaE_		     javaExceptions
1038ada17c4SBram Moolenaar  JavaHiLink javaC_		     javaConstant
1048ada17c4SBram Moolenaar
105071d4279SBram Moolenaar  syn keyword javaLangObject clone equals finalize getClass hashCode
106071d4279SBram Moolenaar  syn keyword javaLangObject notify notifyAll toString wait
107071d4279SBram Moolenaar  JavaHiLink javaLangObject		     javaConstant
1088ada17c4SBram Moolenaar  syn cluster javaTop add=javaLangObject
109071d4279SBram Moolenaarendif
110071d4279SBram Moolenaar
111071d4279SBram Moolenaarif filereadable(expand("<sfile>:p:h")."/javaid.vim")
112071d4279SBram Moolenaar  source <sfile>:p:h/javaid.vim
113071d4279SBram Moolenaarendif
114071d4279SBram Moolenaar
115071d4279SBram Moolenaarif exists("java_space_errors")
116071d4279SBram Moolenaar  if !exists("java_no_trail_space_error")
117071d4279SBram Moolenaar    syn match	javaSpaceError	"\s\+$"
118071d4279SBram Moolenaar  endif
119071d4279SBram Moolenaar  if !exists("java_no_tab_space_error")
120071d4279SBram Moolenaar    syn match	javaSpaceError	" \+\t"me=e-1
121071d4279SBram Moolenaar  endif
122071d4279SBram Moolenaarendif
123071d4279SBram Moolenaar
124*f3c2afb7SBram Moolenaarsyn region  javaLabelRegion	transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter,javaString
125071d4279SBram Moolenaarsyn match   javaUserLabel	"^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
126071d4279SBram Moolenaarsyn keyword javaLabel		default
127071d4279SBram Moolenaar
128b6b046b2SBram Moolenaar" highlighting C++ keywords as errors removed, too many people find it
129b6b046b2SBram Moolenaar" annoying.  Was: if !exists("java_allow_cpp_keywords")
130071d4279SBram Moolenaar
131071d4279SBram Moolenaar" The following cluster contains all java groups except the contained ones
132a5792f58SBram Moolenaarsyn 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
133071d4279SBram Moolenaar
134071d4279SBram Moolenaar
135071d4279SBram Moolenaar" Comments
136071d4279SBram Moolenaarsyn keyword javaTodo		 contained TODO FIXME XXX
137071d4279SBram Moolenaarif exists("java_comment_strings")
138071d4279SBram Moolenaar  syn region  javaCommentString    contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
139071d4279SBram Moolenaar  syn region  javaComment2String   contained start=+"+	end=+$\|"+  contains=javaSpecial,javaSpecialChar,@Spell
140071d4279SBram Moolenaar  syn match   javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
141071d4279SBram Moolenaar  syn match   javaCommentCharacter contained "'\\''" contains=javaSpecialChar
142071d4279SBram Moolenaar  syn match   javaCommentCharacter contained "'[^\\]'"
143071d4279SBram Moolenaar  syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
144071d4279SBram Moolenaar  syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
145071d4279SBram Moolenaarendif
146071d4279SBram Moolenaarsyn region  javaComment		 start="/\*"  end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
147071d4279SBram Moolenaarsyn match   javaCommentStar	 contained "^\s*\*[^/]"me=e-1
148071d4279SBram Moolenaarsyn match   javaCommentStar	 contained "^\s*\*$"
149071d4279SBram Moolenaarsyn match   javaLineComment	 "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
150071d4279SBram MoolenaarJavaHiLink javaCommentString javaString
151071d4279SBram MoolenaarJavaHiLink javaComment2String javaString
152071d4279SBram MoolenaarJavaHiLink javaCommentCharacter javaCharacter
153071d4279SBram Moolenaar
154071d4279SBram Moolenaarsyn cluster javaTop add=javaComment,javaLineComment
155071d4279SBram Moolenaar
156071d4279SBram Moolenaarif !exists("java_ignore_javadoc") && main_syntax != 'jsp'
157071d4279SBram Moolenaar  syntax case ignore
158071d4279SBram Moolenaar  " syntax coloring for javadoc comments (HTML)
159071d4279SBram Moolenaar  syntax include @javaHtml <sfile>:p:h/html.vim
160071d4279SBram Moolenaar  unlet b:current_syntax
1615c73622aSBram Moolenaar  " HTML enables spell checking for all text that is not in a syntax item. This
1625c73622aSBram Moolenaar  " is wrong for Java (all identifiers would be spell-checked), so it's undone
1635c73622aSBram Moolenaar  " here.
1645c73622aSBram Moolenaar  syntax spell default
1655c73622aSBram Moolenaar
1668ada17c4SBram Moolenaar  syn region  javaDocComment	start="/\*\*"  end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
1678ada17c4SBram Moolenaar  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
168071d4279SBram Moolenaar
1690c5fa7d7SBram Moolenaar  syn region javaDocTags	 contained start="{@\(code\|link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
1708ada17c4SBram Moolenaar  syn match  javaDocTags	 contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
171071d4279SBram Moolenaar  syn match  javaDocParam	 contained "\s\S\+"
172071d4279SBram Moolenaar  syn match  javaDocTags	 contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
1738ada17c4SBram Moolenaar  syn region javaDocSeeTag	 contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
1748ada17c4SBram Moolenaar  syn match  javaDocSeeTagParam  contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
175071d4279SBram Moolenaar  syntax case match
176071d4279SBram Moolenaarendif
177071d4279SBram Moolenaar
178071d4279SBram Moolenaar" match the special comment /**/
179071d4279SBram Moolenaarsyn match   javaComment		 "/\*\*/"
180071d4279SBram Moolenaar
181071d4279SBram Moolenaar" Strings and constants
182071d4279SBram Moolenaarsyn match   javaSpecialError	 contained "\\."
183071d4279SBram Moolenaarsyn match   javaSpecialCharError contained "[^']"
18400a927d6SBram Moolenaarsyn match   javaSpecialChar	 contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
185071d4279SBram Moolenaarsyn region  javaString		start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
186071d4279SBram Moolenaar" next line disabled, it can cause a crash for a long line
187071d4279SBram Moolenaar"syn match   javaStringError	  +"\([^"\\]\|\\.\)*$+
188071d4279SBram Moolenaarsyn match   javaCharacter	 "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
189071d4279SBram Moolenaarsyn match   javaCharacter	 "'\\''" contains=javaSpecialChar
190071d4279SBram Moolenaarsyn match   javaCharacter	 "'[^\\]'"
191*f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\<\(0[bB][0-1]\+\|0[0-7]*\|0[xX]\x\+\|\d\(\d\|_\d\)*\)[lL]\=\>"
192*f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\(\<\d\(\d\|_\d\)*\.\(\d\(\d\|_\d\)*\)\=\|\.\d\(\d\|_\d\)*\)\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\="
193*f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\<\d\(\d\|_\d\)*[eE][-+]\=\d\(\d\|_\d\)*[fFdD]\=\>"
194*f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\<\d\(\d\|_\d\)*\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\>"
195071d4279SBram Moolenaar
196071d4279SBram Moolenaar" unicode characters
19700a927d6SBram Moolenaarsyn match   javaSpecial "\\u\d\{4\}"
198071d4279SBram Moolenaar
199071d4279SBram Moolenaarsyn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
200071d4279SBram Moolenaar
201071d4279SBram Moolenaarif exists("java_highlight_functions")
202071d4279SBram Moolenaar  if java_highlight_functions == "indent"
203*f3c2afb7SBram Moolenaar    syn match  javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
204*f3c2afb7SBram Moolenaar    syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
205*f3c2afb7SBram Moolenaar    syn match  javaFuncDef "^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
206*f3c2afb7SBram Moolenaar    syn region javaFuncDef start=+^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
207071d4279SBram Moolenaar  else
208071d4279SBram Moolenaar    " This line catches method declarations at any indentation>0, but it assumes
209071d4279SBram Moolenaar    " two things:
210071d4279SBram Moolenaar    "	1. class names are always capitalized (ie: Button)
211071d4279SBram Moolenaar    "	2. method names are never capitalized (except constructors, of course)
212*f3c2afb7SBram Moolenaar    "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
213*f3c2afb7SBram Moolenaar    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
214071d4279SBram Moolenaar  endif
215*f3c2afb7SBram Moolenaar  syn match javaLambdaDef "[a-zA-Z_][a-zA-Z0-9_]*\s*->"
216071d4279SBram Moolenaar  syn match  javaBraces  "[{}]"
217*f3c2afb7SBram Moolenaar  syn cluster javaTop add=javaFuncDef,javaBraces,javaLambdaDef
218071d4279SBram Moolenaarendif
219071d4279SBram Moolenaar
220071d4279SBram Moolenaarif exists("java_highlight_debug")
221071d4279SBram Moolenaar
222071d4279SBram Moolenaar  " Strings and constants
223071d4279SBram Moolenaar  syn match   javaDebugSpecial		contained "\\\d\d\d\|\\."
224071d4279SBram Moolenaar  syn region  javaDebugString		contained start=+"+  end=+"+  contains=javaDebugSpecial
225071d4279SBram Moolenaar  syn match   javaDebugStringError	+"\([^"\\]\|\\.\)*$+
226071d4279SBram Moolenaar  syn match   javaDebugCharacter	contained "'[^\\]'"
227071d4279SBram Moolenaar  syn match   javaDebugSpecialCharacter contained "'\\.'"
228071d4279SBram Moolenaar  syn match   javaDebugSpecialCharacter contained "'\\''"
229071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
230071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
231071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
232071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
233071d4279SBram Moolenaar  syn keyword javaDebugBoolean		contained true false
234071d4279SBram Moolenaar  syn keyword javaDebugType		contained null this super
235071d4279SBram Moolenaar  syn region javaDebugParen  start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
236071d4279SBram Moolenaar
237071d4279SBram Moolenaar  " to make this work you must define the highlighting for these groups
238071d4279SBram Moolenaar  syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
239293ee4d4SBram Moolenaar  syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
240071d4279SBram Moolenaar  syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
241071d4279SBram Moolenaar  syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
242071d4279SBram Moolenaar
243071d4279SBram Moolenaar  syn cluster javaTop add=javaDebug
244071d4279SBram Moolenaar
245071d4279SBram Moolenaar  if version >= 508 || !exists("did_c_syn_inits")
246071d4279SBram Moolenaar    JavaHiLink javaDebug		 Debug
247071d4279SBram Moolenaar    JavaHiLink javaDebugString		 DebugString
248071d4279SBram Moolenaar    JavaHiLink javaDebugStringError	 javaError
249071d4279SBram Moolenaar    JavaHiLink javaDebugType		 DebugType
250071d4279SBram Moolenaar    JavaHiLink javaDebugBoolean		 DebugBoolean
251071d4279SBram Moolenaar    JavaHiLink javaDebugNumber		 Debug
252071d4279SBram Moolenaar    JavaHiLink javaDebugSpecial		 DebugSpecial
253071d4279SBram Moolenaar    JavaHiLink javaDebugSpecialCharacter DebugSpecial
254071d4279SBram Moolenaar    JavaHiLink javaDebugCharacter	 DebugString
255071d4279SBram Moolenaar    JavaHiLink javaDebugParen		 Debug
256071d4279SBram Moolenaar
257071d4279SBram Moolenaar    JavaHiLink DebugString		 String
258071d4279SBram Moolenaar    JavaHiLink DebugSpecial		 Special
259071d4279SBram Moolenaar    JavaHiLink DebugBoolean		 Boolean
260071d4279SBram Moolenaar    JavaHiLink DebugType		 Type
261071d4279SBram Moolenaar  endif
262071d4279SBram Moolenaarendif
263071d4279SBram Moolenaar
264071d4279SBram Moolenaarif exists("java_mark_braces_in_parens_as_errors")
265071d4279SBram Moolenaar  syn match javaInParen		 contained "[{}]"
266071d4279SBram Moolenaar  JavaHiLink javaInParen	javaError
267071d4279SBram Moolenaar  syn cluster javaTop add=javaInParen
268071d4279SBram Moolenaarendif
269071d4279SBram Moolenaar
270071d4279SBram Moolenaar" catch errors caused by wrong parenthesis
271071d4279SBram Moolenaarsyn region  javaParenT	transparent matchgroup=javaParen  start="(" end=")" contains=@javaTop,javaParenT1
272071d4279SBram Moolenaarsyn region  javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
273071d4279SBram Moolenaarsyn region  javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT  contained
274071d4279SBram Moolenaarsyn match   javaParenError	 ")"
275293ee4d4SBram Moolenaar" catch errors caused by wrong square parenthesis
276293ee4d4SBram Moolenaarsyn region  javaParenT	transparent matchgroup=javaParen  start="\[" end="\]" contains=@javaTop,javaParenT1
277293ee4d4SBram Moolenaarsyn region  javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
278293ee4d4SBram Moolenaarsyn region  javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT  contained
279293ee4d4SBram Moolenaarsyn match   javaParenError	 "\]"
280293ee4d4SBram Moolenaar
281071d4279SBram MoolenaarJavaHiLink javaParenError	javaError
282071d4279SBram Moolenaar
283*f3c2afb7SBram Moolenaarif exists("java_highlight_functions")
284*f3c2afb7SBram Moolenaar   syn match javaLambdaDef "([a-zA-Z0-9_<>\[\], \t]*)\s*->"
285*f3c2afb7SBram Moolenaar   " needs to be defined after the parenthesis error catcher to work
286*f3c2afb7SBram Moolenaarendif
287*f3c2afb7SBram Moolenaar
288071d4279SBram Moolenaarif !exists("java_minlines")
289071d4279SBram Moolenaar  let java_minlines = 10
290071d4279SBram Moolenaarendif
291071d4279SBram Moolenaarexec "syn sync ccomment javaComment minlines=" . java_minlines
292071d4279SBram Moolenaar
293071d4279SBram Moolenaar" The default highlighting.
294071d4279SBram Moolenaarif version >= 508 || !exists("did_java_syn_inits")
295071d4279SBram Moolenaar  if version < 508
296071d4279SBram Moolenaar    let did_java_syn_inits = 1
297071d4279SBram Moolenaar  endif
298*f3c2afb7SBram Moolenaar  JavaHiLink javaLambdaDef		Function
299071d4279SBram Moolenaar  JavaHiLink javaFuncDef		Function
300a5792f58SBram Moolenaar  JavaHiLink javaVarArg			Function
301071d4279SBram Moolenaar  JavaHiLink javaBraces			Function
302071d4279SBram Moolenaar  JavaHiLink javaBranch			Conditional
303071d4279SBram Moolenaar  JavaHiLink javaUserLabelRef		javaUserLabel
304071d4279SBram Moolenaar  JavaHiLink javaLabel			Label
305071d4279SBram Moolenaar  JavaHiLink javaUserLabel		Label
306071d4279SBram Moolenaar  JavaHiLink javaConditional		Conditional
307071d4279SBram Moolenaar  JavaHiLink javaRepeat			Repeat
308071d4279SBram Moolenaar  JavaHiLink javaExceptions		Exception
309071d4279SBram Moolenaar  JavaHiLink javaAssert			Statement
310071d4279SBram Moolenaar  JavaHiLink javaStorageClass		StorageClass
311071d4279SBram Moolenaar  JavaHiLink javaMethodDecl		javaStorageClass
312071d4279SBram Moolenaar  JavaHiLink javaClassDecl		javaStorageClass
313071d4279SBram Moolenaar  JavaHiLink javaScopeDecl		javaStorageClass
314071d4279SBram Moolenaar  JavaHiLink javaBoolean		Boolean
315071d4279SBram Moolenaar  JavaHiLink javaSpecial		Special
316071d4279SBram Moolenaar  JavaHiLink javaSpecialError		Error
317071d4279SBram Moolenaar  JavaHiLink javaSpecialCharError	Error
318071d4279SBram Moolenaar  JavaHiLink javaString			String
319071d4279SBram Moolenaar  JavaHiLink javaCharacter		Character
320071d4279SBram Moolenaar  JavaHiLink javaSpecialChar		SpecialChar
321071d4279SBram Moolenaar  JavaHiLink javaNumber			Number
322071d4279SBram Moolenaar  JavaHiLink javaError			Error
323071d4279SBram Moolenaar  JavaHiLink javaStringError		Error
324071d4279SBram Moolenaar  JavaHiLink javaStatement		Statement
325071d4279SBram Moolenaar  JavaHiLink javaOperator		Operator
326071d4279SBram Moolenaar  JavaHiLink javaComment		Comment
327071d4279SBram Moolenaar  JavaHiLink javaDocComment		Comment
328071d4279SBram Moolenaar  JavaHiLink javaLineComment		Comment
329071d4279SBram Moolenaar  JavaHiLink javaConstant		Constant
330071d4279SBram Moolenaar  JavaHiLink javaTypedef		Typedef
331071d4279SBram Moolenaar  JavaHiLink javaTodo			Todo
332a5792f58SBram Moolenaar  JavaHiLink javaAnnotation		PreProc
333071d4279SBram Moolenaar
334071d4279SBram Moolenaar  JavaHiLink javaCommentTitle		SpecialComment
335071d4279SBram Moolenaar  JavaHiLink javaDocTags		Special
336071d4279SBram Moolenaar  JavaHiLink javaDocParam		Function
3378ada17c4SBram Moolenaar  JavaHiLink javaDocSeeTagParam		Function
338071d4279SBram Moolenaar  JavaHiLink javaCommentStar		javaComment
339071d4279SBram Moolenaar
340071d4279SBram Moolenaar  JavaHiLink javaType			Type
341071d4279SBram Moolenaar  JavaHiLink javaExternal		Include
342071d4279SBram Moolenaar
343071d4279SBram Moolenaar  JavaHiLink htmlComment		Special
344071d4279SBram Moolenaar  JavaHiLink htmlCommentPart		Special
345071d4279SBram Moolenaar  JavaHiLink javaSpaceError		Error
346071d4279SBram Moolenaarendif
347071d4279SBram Moolenaar
348071d4279SBram Moolenaardelcommand JavaHiLink
349071d4279SBram Moolenaar
350071d4279SBram Moolenaarlet b:current_syntax = "java"
351071d4279SBram Moolenaar
352071d4279SBram Moolenaarif main_syntax == 'java'
353071d4279SBram Moolenaar  unlet main_syntax
354071d4279SBram Moolenaarendif
355071d4279SBram Moolenaar
356071d4279SBram Moolenaarlet b:spell_options="contained"
3570c5fa7d7SBram Moolenaarlet &cpo = s:cpo_save
3580c5fa7d7SBram Moolenaarunlet s:cpo_save
359071d4279SBram Moolenaar
360071d4279SBram Moolenaar" vim: ts=8
361