xref: /vim-8.2.3635/runtime/syntax/java.vim (revision 89bcfda6)
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
5f3c2afb7SBram 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
9*89bcfda6SBram Moolenaar" quit when a syntax file was already loaded
10071d4279SBram Moolenaarif !exists("main_syntax")
11*89bcfda6SBram Moolenaar  if exists("b:current_syntax")
12071d4279SBram Moolenaar    finish
13071d4279SBram Moolenaar  endif
14071d4279SBram Moolenaar  " we define it here so that included files can test for it
15071d4279SBram Moolenaar  let main_syntax='java'
165c73622aSBram Moolenaar  syn region javaFold start="{" end="}" transparent fold
17071d4279SBram Moolenaarendif
18071d4279SBram Moolenaar
190c5fa7d7SBram Moolenaarlet s:cpo_save = &cpo
200c5fa7d7SBram Moolenaarset cpo&vim
210c5fa7d7SBram Moolenaar
22071d4279SBram Moolenaar" don't use standard HiLink, it will not work with included syntax files
23071d4279SBram Moolenaarcommand! -nargs=+ JavaHiLink hi def link <args>
24071d4279SBram Moolenaar
25071d4279SBram Moolenaar" some characters that cannot be in a java program (outside a string)
26071d4279SBram Moolenaarsyn match javaError "[\\@`]"
27f3c2afb7SBram Moolenaarsyn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/"
280c5fa7d7SBram Moolenaar
29071d4279SBram Moolenaarsyn match javaOK "\.\.\."
30071d4279SBram Moolenaar
31071d4279SBram Moolenaar" use separate name so that it can be deleted in javacc.vim
32071d4279SBram Moolenaarsyn match   javaError2 "#\|=<"
33071d4279SBram MoolenaarJavaHiLink javaError2 javaError
34071d4279SBram Moolenaar
35071d4279SBram Moolenaar
36071d4279SBram Moolenaar
37071d4279SBram Moolenaar" keyword definitions
38071d4279SBram Moolenaarsyn keyword javaExternal	native package
39293ee4d4SBram Moolenaarsyn match javaExternal		"\<import\>\(\s\+static\>\)\?"
40071d4279SBram Moolenaarsyn keyword javaError		goto const
41071d4279SBram Moolenaarsyn keyword javaConditional	if else switch
42071d4279SBram Moolenaarsyn keyword javaRepeat		while for do
43071d4279SBram Moolenaarsyn keyword javaBoolean		true false
44071d4279SBram Moolenaarsyn keyword javaConstant	null
45071d4279SBram Moolenaarsyn keyword javaTypedef		this super
46071d4279SBram Moolenaarsyn keyword javaOperator	new instanceof
47071d4279SBram Moolenaarsyn keyword javaType		boolean char byte short int long float double
48071d4279SBram Moolenaarsyn keyword javaType		void
49071d4279SBram Moolenaarsyn keyword javaStatement	return
50071d4279SBram Moolenaarsyn keyword javaStorageClass	static synchronized transient volatile final strictfp serializable
51071d4279SBram Moolenaarsyn keyword javaExceptions	throw try catch finally
52071d4279SBram Moolenaarsyn keyword javaAssert		assert
53071d4279SBram Moolenaarsyn keyword javaMethodDecl	synchronized throws
54071d4279SBram Moolenaarsyn keyword javaClassDecl	extends implements interface
55071d4279SBram Moolenaar" to differentiate the keyword class from MyClass.class we use a match here
56071d4279SBram Moolenaarsyn match   javaTypedef		"\.\s*\<class\>"ms=s+1
57071d4279SBram Moolenaarsyn keyword javaClassDecl	enum
58071d4279SBram Moolenaarsyn match   javaClassDecl	"^class\>"
59071d4279SBram Moolenaarsyn match   javaClassDecl	"[^.]\s*\<class\>"ms=s+1
60f3c2afb7SBram Moolenaarsyn match   javaAnnotation	"@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>\(([^)]*)\)\=" contains=javaString
61a5792f58SBram Moolenaarsyn match   javaClassDecl	"@interface\>"
62071d4279SBram Moolenaarsyn keyword javaBranch		break continue nextgroup=javaUserLabelRef skipwhite
63071d4279SBram Moolenaarsyn match   javaUserLabelRef	"\k\+" contained
64a5792f58SBram Moolenaarsyn match   javaVarArg		"\.\.\."
65071d4279SBram Moolenaarsyn keyword javaScopeDecl	public protected private abstract
66071d4279SBram Moolenaar
678ada17c4SBram Moolenaarif exists("java_highlight_java_lang_ids")
688ada17c4SBram Moolenaar  let java_highlight_all=1
698ada17c4SBram Moolenaarendif
708ada17c4SBram Moolenaarif exists("java_highlight_all")  || exists("java_highlight_java")  || exists("java_highlight_java_lang")
71071d4279SBram Moolenaar  " java.lang.*
72071d4279SBram Moolenaar  syn match javaLangClass "\<System\>"
738ada17c4SBram Moolenaar  syn keyword javaR_JavaLang NegativeArraySizeException ArrayStoreException IllegalStateException RuntimeException IndexOutOfBoundsException UnsupportedOperationException ArrayIndexOutOfBoundsException ArithmeticException ClassCastException EnumConstantNotPresentException StringIndexOutOfBoundsException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException NumberFormatException NullPointerException TypeNotPresentException SecurityException
748ada17c4SBram Moolenaar  syn cluster javaTop add=javaR_JavaLang
758ada17c4SBram Moolenaar  syn cluster javaClasses add=javaR_JavaLang
768ada17c4SBram Moolenaar  JavaHiLink javaR_JavaLang javaR_Java
778ada17c4SBram 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
788ada17c4SBram Moolenaar  syn cluster javaTop add=javaC_JavaLang
798ada17c4SBram Moolenaar  syn cluster javaClasses add=javaC_JavaLang
808ada17c4SBram Moolenaar  JavaHiLink javaC_JavaLang javaC_Java
818ada17c4SBram 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
828ada17c4SBram Moolenaar  syn cluster javaTop add=javaE_JavaLang
838ada17c4SBram Moolenaar  syn cluster javaClasses add=javaE_JavaLang
848ada17c4SBram Moolenaar  JavaHiLink javaE_JavaLang javaE_Java
858ada17c4SBram Moolenaar  syn keyword javaX_JavaLang CloneNotSupportedException Exception NoSuchMethodException IllegalAccessException NoSuchFieldException Throwable InterruptedException ClassNotFoundException InstantiationException
868ada17c4SBram Moolenaar  syn cluster javaTop add=javaX_JavaLang
878ada17c4SBram Moolenaar  syn cluster javaClasses add=javaX_JavaLang
888ada17c4SBram Moolenaar  JavaHiLink javaX_JavaLang javaX_Java
898ada17c4SBram Moolenaar
908ada17c4SBram Moolenaar  JavaHiLink javaR_Java javaR_
918ada17c4SBram Moolenaar  JavaHiLink javaC_Java javaC_
928ada17c4SBram Moolenaar  JavaHiLink javaE_Java javaE_
938ada17c4SBram Moolenaar  JavaHiLink javaX_Java javaX_
948ada17c4SBram Moolenaar  JavaHiLink javaX_		     javaExceptions
958ada17c4SBram Moolenaar  JavaHiLink javaR_		     javaExceptions
968ada17c4SBram Moolenaar  JavaHiLink javaE_		     javaExceptions
978ada17c4SBram Moolenaar  JavaHiLink javaC_		     javaConstant
988ada17c4SBram Moolenaar
99071d4279SBram Moolenaar  syn keyword javaLangObject clone equals finalize getClass hashCode
100071d4279SBram Moolenaar  syn keyword javaLangObject notify notifyAll toString wait
101071d4279SBram Moolenaar  JavaHiLink javaLangObject		     javaConstant
1028ada17c4SBram Moolenaar  syn cluster javaTop add=javaLangObject
103071d4279SBram Moolenaarendif
104071d4279SBram Moolenaar
105071d4279SBram Moolenaarif filereadable(expand("<sfile>:p:h")."/javaid.vim")
106071d4279SBram Moolenaar  source <sfile>:p:h/javaid.vim
107071d4279SBram Moolenaarendif
108071d4279SBram Moolenaar
109071d4279SBram Moolenaarif exists("java_space_errors")
110071d4279SBram Moolenaar  if !exists("java_no_trail_space_error")
111071d4279SBram Moolenaar    syn match	javaSpaceError	"\s\+$"
112071d4279SBram Moolenaar  endif
113071d4279SBram Moolenaar  if !exists("java_no_tab_space_error")
114071d4279SBram Moolenaar    syn match	javaSpaceError	" \+\t"me=e-1
115071d4279SBram Moolenaar  endif
116071d4279SBram Moolenaarendif
117071d4279SBram Moolenaar
118f3c2afb7SBram Moolenaarsyn region  javaLabelRegion	transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter,javaString
119071d4279SBram Moolenaarsyn match   javaUserLabel	"^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
120071d4279SBram Moolenaarsyn keyword javaLabel		default
121071d4279SBram Moolenaar
122b6b046b2SBram Moolenaar" highlighting C++ keywords as errors removed, too many people find it
123b6b046b2SBram Moolenaar" annoying.  Was: if !exists("java_allow_cpp_keywords")
124071d4279SBram Moolenaar
125071d4279SBram Moolenaar" The following cluster contains all java groups except the contained ones
126a5792f58SBram 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
127071d4279SBram Moolenaar
128071d4279SBram Moolenaar
129071d4279SBram Moolenaar" Comments
130071d4279SBram Moolenaarsyn keyword javaTodo		 contained TODO FIXME XXX
131071d4279SBram Moolenaarif exists("java_comment_strings")
132071d4279SBram Moolenaar  syn region  javaCommentString    contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
133071d4279SBram Moolenaar  syn region  javaComment2String   contained start=+"+	end=+$\|"+  contains=javaSpecial,javaSpecialChar,@Spell
134071d4279SBram Moolenaar  syn match   javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
135071d4279SBram Moolenaar  syn match   javaCommentCharacter contained "'\\''" contains=javaSpecialChar
136071d4279SBram Moolenaar  syn match   javaCommentCharacter contained "'[^\\]'"
137071d4279SBram Moolenaar  syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
138071d4279SBram Moolenaar  syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
139071d4279SBram Moolenaarendif
140071d4279SBram Moolenaarsyn region  javaComment		 start="/\*"  end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
141071d4279SBram Moolenaarsyn match   javaCommentStar	 contained "^\s*\*[^/]"me=e-1
142071d4279SBram Moolenaarsyn match   javaCommentStar	 contained "^\s*\*$"
143071d4279SBram Moolenaarsyn match   javaLineComment	 "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
144071d4279SBram MoolenaarJavaHiLink javaCommentString javaString
145071d4279SBram MoolenaarJavaHiLink javaComment2String javaString
146071d4279SBram MoolenaarJavaHiLink javaCommentCharacter javaCharacter
147071d4279SBram Moolenaar
148071d4279SBram Moolenaarsyn cluster javaTop add=javaComment,javaLineComment
149071d4279SBram Moolenaar
150071d4279SBram Moolenaarif !exists("java_ignore_javadoc") && main_syntax != 'jsp'
151071d4279SBram Moolenaar  syntax case ignore
152071d4279SBram Moolenaar  " syntax coloring for javadoc comments (HTML)
153071d4279SBram Moolenaar  syntax include @javaHtml <sfile>:p:h/html.vim
154071d4279SBram Moolenaar  unlet b:current_syntax
1555c73622aSBram Moolenaar  " HTML enables spell checking for all text that is not in a syntax item. This
1565c73622aSBram Moolenaar  " is wrong for Java (all identifiers would be spell-checked), so it's undone
1575c73622aSBram Moolenaar  " here.
1585c73622aSBram Moolenaar  syntax spell default
1595c73622aSBram Moolenaar
1608ada17c4SBram Moolenaar  syn region  javaDocComment	start="/\*\*"  end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
1618ada17c4SBram 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
162071d4279SBram Moolenaar
1630c5fa7d7SBram Moolenaar  syn region javaDocTags	 contained start="{@\(code\|link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
1648ada17c4SBram Moolenaar  syn match  javaDocTags	 contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
165071d4279SBram Moolenaar  syn match  javaDocParam	 contained "\s\S\+"
166071d4279SBram Moolenaar  syn match  javaDocTags	 contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
1678ada17c4SBram Moolenaar  syn region javaDocSeeTag	 contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
1688ada17c4SBram Moolenaar  syn match  javaDocSeeTagParam  contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
169071d4279SBram Moolenaar  syntax case match
170071d4279SBram Moolenaarendif
171071d4279SBram Moolenaar
172071d4279SBram Moolenaar" match the special comment /**/
173071d4279SBram Moolenaarsyn match   javaComment		 "/\*\*/"
174071d4279SBram Moolenaar
175071d4279SBram Moolenaar" Strings and constants
176071d4279SBram Moolenaarsyn match   javaSpecialError	 contained "\\."
177071d4279SBram Moolenaarsyn match   javaSpecialCharError contained "[^']"
17800a927d6SBram Moolenaarsyn match   javaSpecialChar	 contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
179071d4279SBram Moolenaarsyn region  javaString		start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
180071d4279SBram Moolenaar" next line disabled, it can cause a crash for a long line
181071d4279SBram Moolenaar"syn match   javaStringError	  +"\([^"\\]\|\\.\)*$+
182071d4279SBram Moolenaarsyn match   javaCharacter	 "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
183071d4279SBram Moolenaarsyn match   javaCharacter	 "'\\''" contains=javaSpecialChar
184071d4279SBram Moolenaarsyn match   javaCharacter	 "'[^\\]'"
185f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\<\(0[bB][0-1]\+\|0[0-7]*\|0[xX]\x\+\|\d\(\d\|_\d\)*\)[lL]\=\>"
186f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\(\<\d\(\d\|_\d\)*\.\(\d\(\d\|_\d\)*\)\=\|\.\d\(\d\|_\d\)*\)\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\="
187f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\<\d\(\d\|_\d\)*[eE][-+]\=\d\(\d\|_\d\)*[fFdD]\=\>"
188f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\<\d\(\d\|_\d\)*\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\>"
189071d4279SBram Moolenaar
190071d4279SBram Moolenaar" unicode characters
19100a927d6SBram Moolenaarsyn match   javaSpecial "\\u\d\{4\}"
192071d4279SBram Moolenaar
193071d4279SBram Moolenaarsyn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
194071d4279SBram Moolenaar
195071d4279SBram Moolenaarif exists("java_highlight_functions")
196071d4279SBram Moolenaar  if java_highlight_functions == "indent"
197f3c2afb7SBram Moolenaar    syn match  javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
198f3c2afb7SBram Moolenaar    syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
199f3c2afb7SBram Moolenaar    syn match  javaFuncDef "^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
200f3c2afb7SBram Moolenaar    syn region javaFuncDef start=+^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
201071d4279SBram Moolenaar  else
202071d4279SBram Moolenaar    " This line catches method declarations at any indentation>0, but it assumes
203071d4279SBram Moolenaar    " two things:
204071d4279SBram Moolenaar    "	1. class names are always capitalized (ie: Button)
205071d4279SBram Moolenaar    "	2. method names are never capitalized (except constructors, of course)
206f3c2afb7SBram 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
207f3c2afb7SBram 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
208071d4279SBram Moolenaar  endif
209f3c2afb7SBram Moolenaar  syn match javaLambdaDef "[a-zA-Z_][a-zA-Z0-9_]*\s*->"
210071d4279SBram Moolenaar  syn match  javaBraces  "[{}]"
211f3c2afb7SBram Moolenaar  syn cluster javaTop add=javaFuncDef,javaBraces,javaLambdaDef
212071d4279SBram Moolenaarendif
213071d4279SBram Moolenaar
214071d4279SBram Moolenaarif exists("java_highlight_debug")
215071d4279SBram Moolenaar
216071d4279SBram Moolenaar  " Strings and constants
217071d4279SBram Moolenaar  syn match   javaDebugSpecial		contained "\\\d\d\d\|\\."
218071d4279SBram Moolenaar  syn region  javaDebugString		contained start=+"+  end=+"+  contains=javaDebugSpecial
219071d4279SBram Moolenaar  syn match   javaDebugStringError	+"\([^"\\]\|\\.\)*$+
220071d4279SBram Moolenaar  syn match   javaDebugCharacter	contained "'[^\\]'"
221071d4279SBram Moolenaar  syn match   javaDebugSpecialCharacter contained "'\\.'"
222071d4279SBram Moolenaar  syn match   javaDebugSpecialCharacter contained "'\\''"
223071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
224071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
225071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
226071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
227071d4279SBram Moolenaar  syn keyword javaDebugBoolean		contained true false
228071d4279SBram Moolenaar  syn keyword javaDebugType		contained null this super
229071d4279SBram Moolenaar  syn region javaDebugParen  start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
230071d4279SBram Moolenaar
231071d4279SBram Moolenaar  " to make this work you must define the highlighting for these groups
232071d4279SBram Moolenaar  syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
233293ee4d4SBram Moolenaar  syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
234071d4279SBram Moolenaar  syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
235071d4279SBram Moolenaar  syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
236071d4279SBram Moolenaar
237071d4279SBram Moolenaar  syn cluster javaTop add=javaDebug
238071d4279SBram Moolenaar
239071d4279SBram Moolenaar  JavaHiLink javaDebug		 Debug
240071d4279SBram Moolenaar  JavaHiLink javaDebugString		 DebugString
241071d4279SBram Moolenaar  JavaHiLink javaDebugStringError	 javaError
242071d4279SBram Moolenaar  JavaHiLink javaDebugType		 DebugType
243071d4279SBram Moolenaar  JavaHiLink javaDebugBoolean		 DebugBoolean
244071d4279SBram Moolenaar  JavaHiLink javaDebugNumber		 Debug
245071d4279SBram Moolenaar  JavaHiLink javaDebugSpecial		 DebugSpecial
246071d4279SBram Moolenaar  JavaHiLink javaDebugSpecialCharacter DebugSpecial
247071d4279SBram Moolenaar  JavaHiLink javaDebugCharacter	 DebugString
248071d4279SBram Moolenaar  JavaHiLink javaDebugParen		 Debug
249071d4279SBram Moolenaar
250071d4279SBram Moolenaar  JavaHiLink DebugString		 String
251071d4279SBram Moolenaar  JavaHiLink DebugSpecial		 Special
252071d4279SBram Moolenaar  JavaHiLink DebugBoolean		 Boolean
253071d4279SBram Moolenaar  JavaHiLink DebugType		 Type
254071d4279SBram Moolenaarendif
255071d4279SBram Moolenaar
256071d4279SBram Moolenaarif exists("java_mark_braces_in_parens_as_errors")
257071d4279SBram Moolenaar  syn match javaInParen		 contained "[{}]"
258071d4279SBram Moolenaar  JavaHiLink javaInParen	javaError
259071d4279SBram Moolenaar  syn cluster javaTop add=javaInParen
260071d4279SBram Moolenaarendif
261071d4279SBram Moolenaar
262071d4279SBram Moolenaar" catch errors caused by wrong parenthesis
263071d4279SBram Moolenaarsyn region  javaParenT	transparent matchgroup=javaParen  start="(" end=")" contains=@javaTop,javaParenT1
264071d4279SBram Moolenaarsyn region  javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
265071d4279SBram Moolenaarsyn region  javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT  contained
266071d4279SBram Moolenaarsyn match   javaParenError	 ")"
267293ee4d4SBram Moolenaar" catch errors caused by wrong square parenthesis
268293ee4d4SBram Moolenaarsyn region  javaParenT	transparent matchgroup=javaParen  start="\[" end="\]" contains=@javaTop,javaParenT1
269293ee4d4SBram Moolenaarsyn region  javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
270293ee4d4SBram Moolenaarsyn region  javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT  contained
271293ee4d4SBram Moolenaarsyn match   javaParenError	 "\]"
272293ee4d4SBram Moolenaar
273071d4279SBram MoolenaarJavaHiLink javaParenError	javaError
274071d4279SBram Moolenaar
275f3c2afb7SBram Moolenaarif exists("java_highlight_functions")
276f3c2afb7SBram Moolenaar   syn match javaLambdaDef "([a-zA-Z0-9_<>\[\], \t]*)\s*->"
277f3c2afb7SBram Moolenaar   " needs to be defined after the parenthesis error catcher to work
278f3c2afb7SBram Moolenaarendif
279f3c2afb7SBram Moolenaar
280071d4279SBram Moolenaarif !exists("java_minlines")
281071d4279SBram Moolenaar  let java_minlines = 10
282071d4279SBram Moolenaarendif
283071d4279SBram Moolenaarexec "syn sync ccomment javaComment minlines=" . java_minlines
284071d4279SBram Moolenaar
285071d4279SBram Moolenaar" The default highlighting.
286f3c2afb7SBram MoolenaarJavaHiLink javaLambdaDef		Function
287071d4279SBram MoolenaarJavaHiLink javaFuncDef		Function
288a5792f58SBram MoolenaarJavaHiLink javaVarArg			Function
289071d4279SBram MoolenaarJavaHiLink javaBraces			Function
290071d4279SBram MoolenaarJavaHiLink javaBranch			Conditional
291071d4279SBram MoolenaarJavaHiLink javaUserLabelRef		javaUserLabel
292071d4279SBram MoolenaarJavaHiLink javaLabel			Label
293071d4279SBram MoolenaarJavaHiLink javaUserLabel		Label
294071d4279SBram MoolenaarJavaHiLink javaConditional		Conditional
295071d4279SBram MoolenaarJavaHiLink javaRepeat			Repeat
296071d4279SBram MoolenaarJavaHiLink javaExceptions		Exception
297071d4279SBram MoolenaarJavaHiLink javaAssert			Statement
298071d4279SBram MoolenaarJavaHiLink javaStorageClass		StorageClass
299071d4279SBram MoolenaarJavaHiLink javaMethodDecl		javaStorageClass
300071d4279SBram MoolenaarJavaHiLink javaClassDecl		javaStorageClass
301071d4279SBram MoolenaarJavaHiLink javaScopeDecl		javaStorageClass
302071d4279SBram MoolenaarJavaHiLink javaBoolean		Boolean
303071d4279SBram MoolenaarJavaHiLink javaSpecial		Special
304071d4279SBram MoolenaarJavaHiLink javaSpecialError		Error
305071d4279SBram MoolenaarJavaHiLink javaSpecialCharError	Error
306071d4279SBram MoolenaarJavaHiLink javaString			String
307071d4279SBram MoolenaarJavaHiLink javaCharacter		Character
308071d4279SBram MoolenaarJavaHiLink javaSpecialChar		SpecialChar
309071d4279SBram MoolenaarJavaHiLink javaNumber			Number
310071d4279SBram MoolenaarJavaHiLink javaError			Error
311071d4279SBram MoolenaarJavaHiLink javaStringError		Error
312071d4279SBram MoolenaarJavaHiLink javaStatement		Statement
313071d4279SBram MoolenaarJavaHiLink javaOperator		Operator
314071d4279SBram MoolenaarJavaHiLink javaComment		Comment
315071d4279SBram MoolenaarJavaHiLink javaDocComment		Comment
316071d4279SBram MoolenaarJavaHiLink javaLineComment		Comment
317071d4279SBram MoolenaarJavaHiLink javaConstant		Constant
318071d4279SBram MoolenaarJavaHiLink javaTypedef		Typedef
319071d4279SBram MoolenaarJavaHiLink javaTodo			Todo
320a5792f58SBram MoolenaarJavaHiLink javaAnnotation		PreProc
321071d4279SBram Moolenaar
322071d4279SBram MoolenaarJavaHiLink javaCommentTitle		SpecialComment
323071d4279SBram MoolenaarJavaHiLink javaDocTags		Special
324071d4279SBram MoolenaarJavaHiLink javaDocParam		Function
3258ada17c4SBram MoolenaarJavaHiLink javaDocSeeTagParam		Function
326071d4279SBram MoolenaarJavaHiLink javaCommentStar		javaComment
327071d4279SBram Moolenaar
328071d4279SBram MoolenaarJavaHiLink javaType			Type
329071d4279SBram MoolenaarJavaHiLink javaExternal		Include
330071d4279SBram Moolenaar
331071d4279SBram MoolenaarJavaHiLink htmlComment		Special
332071d4279SBram MoolenaarJavaHiLink htmlCommentPart		Special
333071d4279SBram MoolenaarJavaHiLink javaSpaceError		Error
334071d4279SBram Moolenaar
335071d4279SBram Moolenaardelcommand JavaHiLink
336071d4279SBram Moolenaar
337071d4279SBram Moolenaarlet b:current_syntax = "java"
338071d4279SBram Moolenaar
339071d4279SBram Moolenaarif main_syntax == 'java'
340071d4279SBram Moolenaar  unlet main_syntax
341071d4279SBram Moolenaarendif
342071d4279SBram Moolenaar
343071d4279SBram Moolenaarlet b:spell_options="contained"
3440c5fa7d7SBram Moolenaarlet &cpo = s:cpo_save
3450c5fa7d7SBram Moolenaarunlet s:cpo_save
346071d4279SBram Moolenaar
347071d4279SBram Moolenaar" vim: ts=8
348