xref: /vim-8.2.3635/runtime/syntax/java.vim (revision f37506f6)
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
989bcfda6SBram Moolenaar" quit when a syntax file was already loaded
10071d4279SBram Moolenaarif !exists("main_syntax")
1189bcfda6SBram 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" some characters that cannot be in a java program (outside a string)
23071d4279SBram Moolenaarsyn match javaError "[\\@`]"
24f3c2afb7SBram Moolenaarsyn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/"
250c5fa7d7SBram Moolenaar
26071d4279SBram Moolenaarsyn match javaOK "\.\.\."
27071d4279SBram Moolenaar
28071d4279SBram Moolenaar" use separate name so that it can be deleted in javacc.vim
29071d4279SBram Moolenaarsyn match   javaError2 "#\|=<"
30*f37506f6SBram Moolenaarhi def link javaError2 javaError
31071d4279SBram Moolenaar
32071d4279SBram Moolenaar
33071d4279SBram Moolenaar
34071d4279SBram Moolenaar" keyword definitions
35071d4279SBram Moolenaarsyn keyword javaExternal	native package
36293ee4d4SBram Moolenaarsyn match javaExternal		"\<import\>\(\s\+static\>\)\?"
37071d4279SBram Moolenaarsyn keyword javaError		goto const
38071d4279SBram Moolenaarsyn keyword javaConditional	if else switch
39071d4279SBram Moolenaarsyn keyword javaRepeat		while for do
40071d4279SBram Moolenaarsyn keyword javaBoolean		true false
41071d4279SBram Moolenaarsyn keyword javaConstant	null
42071d4279SBram Moolenaarsyn keyword javaTypedef		this super
43071d4279SBram Moolenaarsyn keyword javaOperator	new instanceof
44071d4279SBram Moolenaarsyn keyword javaType		boolean char byte short int long float double
45071d4279SBram Moolenaarsyn keyword javaType		void
46071d4279SBram Moolenaarsyn keyword javaStatement	return
47071d4279SBram Moolenaarsyn keyword javaStorageClass	static synchronized transient volatile final strictfp serializable
48071d4279SBram Moolenaarsyn keyword javaExceptions	throw try catch finally
49071d4279SBram Moolenaarsyn keyword javaAssert		assert
50071d4279SBram Moolenaarsyn keyword javaMethodDecl	synchronized throws
51071d4279SBram Moolenaarsyn keyword javaClassDecl	extends implements interface
52071d4279SBram Moolenaar" to differentiate the keyword class from MyClass.class we use a match here
53071d4279SBram Moolenaarsyn match   javaTypedef		"\.\s*\<class\>"ms=s+1
54071d4279SBram Moolenaarsyn keyword javaClassDecl	enum
55071d4279SBram Moolenaarsyn match   javaClassDecl	"^class\>"
56071d4279SBram Moolenaarsyn match   javaClassDecl	"[^.]\s*\<class\>"ms=s+1
57f3c2afb7SBram Moolenaarsyn match   javaAnnotation	"@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>\(([^)]*)\)\=" contains=javaString
58a5792f58SBram Moolenaarsyn match   javaClassDecl	"@interface\>"
59071d4279SBram Moolenaarsyn keyword javaBranch		break continue nextgroup=javaUserLabelRef skipwhite
60071d4279SBram Moolenaarsyn match   javaUserLabelRef	"\k\+" contained
61a5792f58SBram Moolenaarsyn match   javaVarArg		"\.\.\."
62071d4279SBram Moolenaarsyn keyword javaScopeDecl	public protected private abstract
63071d4279SBram Moolenaar
648ada17c4SBram Moolenaarif exists("java_highlight_java_lang_ids")
658ada17c4SBram Moolenaar  let java_highlight_all=1
668ada17c4SBram Moolenaarendif
678ada17c4SBram Moolenaarif exists("java_highlight_all")  || exists("java_highlight_java")  || exists("java_highlight_java_lang")
68071d4279SBram Moolenaar  " java.lang.*
69071d4279SBram Moolenaar  syn match javaLangClass "\<System\>"
708ada17c4SBram Moolenaar  syn keyword javaR_JavaLang NegativeArraySizeException ArrayStoreException IllegalStateException RuntimeException IndexOutOfBoundsException UnsupportedOperationException ArrayIndexOutOfBoundsException ArithmeticException ClassCastException EnumConstantNotPresentException StringIndexOutOfBoundsException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException NumberFormatException NullPointerException TypeNotPresentException SecurityException
718ada17c4SBram Moolenaar  syn cluster javaTop add=javaR_JavaLang
728ada17c4SBram Moolenaar  syn cluster javaClasses add=javaR_JavaLang
73*f37506f6SBram Moolenaar  hi def link javaR_JavaLang javaR_Java
748ada17c4SBram 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
758ada17c4SBram Moolenaar  syn cluster javaTop add=javaC_JavaLang
768ada17c4SBram Moolenaar  syn cluster javaClasses add=javaC_JavaLang
77*f37506f6SBram Moolenaar  hi def link javaC_JavaLang javaC_Java
788ada17c4SBram 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
798ada17c4SBram Moolenaar  syn cluster javaTop add=javaE_JavaLang
808ada17c4SBram Moolenaar  syn cluster javaClasses add=javaE_JavaLang
81*f37506f6SBram Moolenaar  hi def link javaE_JavaLang javaE_Java
828ada17c4SBram Moolenaar  syn keyword javaX_JavaLang CloneNotSupportedException Exception NoSuchMethodException IllegalAccessException NoSuchFieldException Throwable InterruptedException ClassNotFoundException InstantiationException
838ada17c4SBram Moolenaar  syn cluster javaTop add=javaX_JavaLang
848ada17c4SBram Moolenaar  syn cluster javaClasses add=javaX_JavaLang
85*f37506f6SBram Moolenaar  hi def link javaX_JavaLang javaX_Java
868ada17c4SBram Moolenaar
87*f37506f6SBram Moolenaar  hi def link javaR_Java javaR_
88*f37506f6SBram Moolenaar  hi def link javaC_Java javaC_
89*f37506f6SBram Moolenaar  hi def link javaE_Java javaE_
90*f37506f6SBram Moolenaar  hi def link javaX_Java javaX_
91*f37506f6SBram Moolenaar  hi def link javaX_		     javaExceptions
92*f37506f6SBram Moolenaar  hi def link javaR_		     javaExceptions
93*f37506f6SBram Moolenaar  hi def link javaE_		     javaExceptions
94*f37506f6SBram Moolenaar  hi def link javaC_		     javaConstant
958ada17c4SBram Moolenaar
96071d4279SBram Moolenaar  syn keyword javaLangObject clone equals finalize getClass hashCode
97071d4279SBram Moolenaar  syn keyword javaLangObject notify notifyAll toString wait
98*f37506f6SBram Moolenaar  hi def link javaLangObject		     javaConstant
998ada17c4SBram Moolenaar  syn cluster javaTop add=javaLangObject
100071d4279SBram Moolenaarendif
101071d4279SBram Moolenaar
102071d4279SBram Moolenaarif filereadable(expand("<sfile>:p:h")."/javaid.vim")
103071d4279SBram Moolenaar  source <sfile>:p:h/javaid.vim
104071d4279SBram Moolenaarendif
105071d4279SBram Moolenaar
106071d4279SBram Moolenaarif exists("java_space_errors")
107071d4279SBram Moolenaar  if !exists("java_no_trail_space_error")
108071d4279SBram Moolenaar    syn match	javaSpaceError	"\s\+$"
109071d4279SBram Moolenaar  endif
110071d4279SBram Moolenaar  if !exists("java_no_tab_space_error")
111071d4279SBram Moolenaar    syn match	javaSpaceError	" \+\t"me=e-1
112071d4279SBram Moolenaar  endif
113071d4279SBram Moolenaarendif
114071d4279SBram Moolenaar
115f3c2afb7SBram Moolenaarsyn region  javaLabelRegion	transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter,javaString
116071d4279SBram Moolenaarsyn match   javaUserLabel	"^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
117071d4279SBram Moolenaarsyn keyword javaLabel		default
118071d4279SBram Moolenaar
119b6b046b2SBram Moolenaar" highlighting C++ keywords as errors removed, too many people find it
120b6b046b2SBram Moolenaar" annoying.  Was: if !exists("java_allow_cpp_keywords")
121071d4279SBram Moolenaar
122071d4279SBram Moolenaar" The following cluster contains all java groups except the contained ones
123a5792f58SBram 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
124071d4279SBram Moolenaar
125071d4279SBram Moolenaar
126071d4279SBram Moolenaar" Comments
127071d4279SBram Moolenaarsyn keyword javaTodo		 contained TODO FIXME XXX
128071d4279SBram Moolenaarif exists("java_comment_strings")
129071d4279SBram Moolenaar  syn region  javaCommentString    contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
130071d4279SBram Moolenaar  syn region  javaComment2String   contained start=+"+	end=+$\|"+  contains=javaSpecial,javaSpecialChar,@Spell
131071d4279SBram Moolenaar  syn match   javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
132071d4279SBram Moolenaar  syn match   javaCommentCharacter contained "'\\''" contains=javaSpecialChar
133071d4279SBram Moolenaar  syn match   javaCommentCharacter contained "'[^\\]'"
134071d4279SBram Moolenaar  syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
135071d4279SBram Moolenaar  syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
136071d4279SBram Moolenaarendif
137071d4279SBram Moolenaarsyn region  javaComment		 start="/\*"  end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
138071d4279SBram Moolenaarsyn match   javaCommentStar	 contained "^\s*\*[^/]"me=e-1
139071d4279SBram Moolenaarsyn match   javaCommentStar	 contained "^\s*\*$"
140071d4279SBram Moolenaarsyn match   javaLineComment	 "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
141*f37506f6SBram Moolenaarhi def link javaCommentString javaString
142*f37506f6SBram Moolenaarhi def link javaComment2String javaString
143*f37506f6SBram Moolenaarhi def link javaCommentCharacter javaCharacter
144071d4279SBram Moolenaar
145071d4279SBram Moolenaarsyn cluster javaTop add=javaComment,javaLineComment
146071d4279SBram Moolenaar
147071d4279SBram Moolenaarif !exists("java_ignore_javadoc") && main_syntax != 'jsp'
148071d4279SBram Moolenaar  syntax case ignore
149071d4279SBram Moolenaar  " syntax coloring for javadoc comments (HTML)
150071d4279SBram Moolenaar  syntax include @javaHtml <sfile>:p:h/html.vim
151071d4279SBram Moolenaar  unlet b:current_syntax
1525c73622aSBram Moolenaar  " HTML enables spell checking for all text that is not in a syntax item. This
1535c73622aSBram Moolenaar  " is wrong for Java (all identifiers would be spell-checked), so it's undone
1545c73622aSBram Moolenaar  " here.
1555c73622aSBram Moolenaar  syntax spell default
1565c73622aSBram Moolenaar
1578ada17c4SBram Moolenaar  syn region  javaDocComment	start="/\*\*"  end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
1588ada17c4SBram 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
159071d4279SBram Moolenaar
1600c5fa7d7SBram Moolenaar  syn region javaDocTags	 contained start="{@\(code\|link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
1618ada17c4SBram Moolenaar  syn match  javaDocTags	 contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
162071d4279SBram Moolenaar  syn match  javaDocParam	 contained "\s\S\+"
163071d4279SBram Moolenaar  syn match  javaDocTags	 contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
1648ada17c4SBram Moolenaar  syn region javaDocSeeTag	 contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
1658ada17c4SBram Moolenaar  syn match  javaDocSeeTagParam  contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
166071d4279SBram Moolenaar  syntax case match
167071d4279SBram Moolenaarendif
168071d4279SBram Moolenaar
169071d4279SBram Moolenaar" match the special comment /**/
170071d4279SBram Moolenaarsyn match   javaComment		 "/\*\*/"
171071d4279SBram Moolenaar
172071d4279SBram Moolenaar" Strings and constants
173071d4279SBram Moolenaarsyn match   javaSpecialError	 contained "\\."
174071d4279SBram Moolenaarsyn match   javaSpecialCharError contained "[^']"
17500a927d6SBram Moolenaarsyn match   javaSpecialChar	 contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
176071d4279SBram Moolenaarsyn region  javaString		start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
177071d4279SBram Moolenaar" next line disabled, it can cause a crash for a long line
178071d4279SBram Moolenaar"syn match   javaStringError	  +"\([^"\\]\|\\.\)*$+
179071d4279SBram Moolenaarsyn match   javaCharacter	 "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
180071d4279SBram Moolenaarsyn match   javaCharacter	 "'\\''" contains=javaSpecialChar
181071d4279SBram Moolenaarsyn match   javaCharacter	 "'[^\\]'"
182f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\<\(0[bB][0-1]\+\|0[0-7]*\|0[xX]\x\+\|\d\(\d\|_\d\)*\)[lL]\=\>"
183f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\(\<\d\(\d\|_\d\)*\.\(\d\(\d\|_\d\)*\)\=\|\.\d\(\d\|_\d\)*\)\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\="
184f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\<\d\(\d\|_\d\)*[eE][-+]\=\d\(\d\|_\d\)*[fFdD]\=\>"
185f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\<\d\(\d\|_\d\)*\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\>"
186071d4279SBram Moolenaar
187071d4279SBram Moolenaar" unicode characters
18800a927d6SBram Moolenaarsyn match   javaSpecial "\\u\d\{4\}"
189071d4279SBram Moolenaar
190071d4279SBram Moolenaarsyn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
191071d4279SBram Moolenaar
192071d4279SBram Moolenaarif exists("java_highlight_functions")
193071d4279SBram Moolenaar  if java_highlight_functions == "indent"
194f3c2afb7SBram Moolenaar    syn match  javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
195f3c2afb7SBram Moolenaar    syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
196f3c2afb7SBram Moolenaar    syn match  javaFuncDef "^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
197f3c2afb7SBram Moolenaar    syn region javaFuncDef start=+^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
198071d4279SBram Moolenaar  else
199071d4279SBram Moolenaar    " This line catches method declarations at any indentation>0, but it assumes
200071d4279SBram Moolenaar    " two things:
201071d4279SBram Moolenaar    "	1. class names are always capitalized (ie: Button)
202071d4279SBram Moolenaar    "	2. method names are never capitalized (except constructors, of course)
203f3c2afb7SBram 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
204f3c2afb7SBram 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
205071d4279SBram Moolenaar  endif
206f3c2afb7SBram Moolenaar  syn match javaLambdaDef "[a-zA-Z_][a-zA-Z0-9_]*\s*->"
207071d4279SBram Moolenaar  syn match  javaBraces  "[{}]"
208f3c2afb7SBram Moolenaar  syn cluster javaTop add=javaFuncDef,javaBraces,javaLambdaDef
209071d4279SBram Moolenaarendif
210071d4279SBram Moolenaar
211071d4279SBram Moolenaarif exists("java_highlight_debug")
212071d4279SBram Moolenaar
213071d4279SBram Moolenaar  " Strings and constants
214071d4279SBram Moolenaar  syn match   javaDebugSpecial		contained "\\\d\d\d\|\\."
215071d4279SBram Moolenaar  syn region  javaDebugString		contained start=+"+  end=+"+  contains=javaDebugSpecial
216071d4279SBram Moolenaar  syn match   javaDebugStringError	+"\([^"\\]\|\\.\)*$+
217071d4279SBram Moolenaar  syn match   javaDebugCharacter	contained "'[^\\]'"
218071d4279SBram Moolenaar  syn match   javaDebugSpecialCharacter contained "'\\.'"
219071d4279SBram Moolenaar  syn match   javaDebugSpecialCharacter contained "'\\''"
220071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
221071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
222071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
223071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
224071d4279SBram Moolenaar  syn keyword javaDebugBoolean		contained true false
225071d4279SBram Moolenaar  syn keyword javaDebugType		contained null this super
226071d4279SBram Moolenaar  syn region javaDebugParen  start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
227071d4279SBram Moolenaar
228071d4279SBram Moolenaar  " to make this work you must define the highlighting for these groups
229071d4279SBram Moolenaar  syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
230293ee4d4SBram Moolenaar  syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
231071d4279SBram Moolenaar  syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
232071d4279SBram Moolenaar  syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
233071d4279SBram Moolenaar
234071d4279SBram Moolenaar  syn cluster javaTop add=javaDebug
235071d4279SBram Moolenaar
236*f37506f6SBram Moolenaar  hi def link javaDebug		 Debug
237*f37506f6SBram Moolenaar  hi def link javaDebugString		 DebugString
238*f37506f6SBram Moolenaar  hi def link javaDebugStringError	 javaError
239*f37506f6SBram Moolenaar  hi def link javaDebugType		 DebugType
240*f37506f6SBram Moolenaar  hi def link javaDebugBoolean		 DebugBoolean
241*f37506f6SBram Moolenaar  hi def link javaDebugNumber		 Debug
242*f37506f6SBram Moolenaar  hi def link javaDebugSpecial		 DebugSpecial
243*f37506f6SBram Moolenaar  hi def link javaDebugSpecialCharacter DebugSpecial
244*f37506f6SBram Moolenaar  hi def link javaDebugCharacter	 DebugString
245*f37506f6SBram Moolenaar  hi def link javaDebugParen		 Debug
246071d4279SBram Moolenaar
247*f37506f6SBram Moolenaar  hi def link DebugString		 String
248*f37506f6SBram Moolenaar  hi def link DebugSpecial		 Special
249*f37506f6SBram Moolenaar  hi def link DebugBoolean		 Boolean
250*f37506f6SBram Moolenaar  hi def link DebugType		 Type
251071d4279SBram Moolenaarendif
252071d4279SBram Moolenaar
253071d4279SBram Moolenaarif exists("java_mark_braces_in_parens_as_errors")
254071d4279SBram Moolenaar  syn match javaInParen		 contained "[{}]"
255*f37506f6SBram Moolenaar  hi def link javaInParen	javaError
256071d4279SBram Moolenaar  syn cluster javaTop add=javaInParen
257071d4279SBram Moolenaarendif
258071d4279SBram Moolenaar
259071d4279SBram Moolenaar" catch errors caused by wrong parenthesis
260071d4279SBram Moolenaarsyn region  javaParenT	transparent matchgroup=javaParen  start="(" end=")" contains=@javaTop,javaParenT1
261071d4279SBram Moolenaarsyn region  javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
262071d4279SBram Moolenaarsyn region  javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT  contained
263071d4279SBram Moolenaarsyn match   javaParenError	 ")"
264293ee4d4SBram Moolenaar" catch errors caused by wrong square parenthesis
265293ee4d4SBram Moolenaarsyn region  javaParenT	transparent matchgroup=javaParen  start="\[" end="\]" contains=@javaTop,javaParenT1
266293ee4d4SBram Moolenaarsyn region  javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
267293ee4d4SBram Moolenaarsyn region  javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT  contained
268293ee4d4SBram Moolenaarsyn match   javaParenError	 "\]"
269293ee4d4SBram Moolenaar
270*f37506f6SBram Moolenaarhi def link javaParenError	javaError
271071d4279SBram Moolenaar
272f3c2afb7SBram Moolenaarif exists("java_highlight_functions")
273f3c2afb7SBram Moolenaar   syn match javaLambdaDef "([a-zA-Z0-9_<>\[\], \t]*)\s*->"
274f3c2afb7SBram Moolenaar   " needs to be defined after the parenthesis error catcher to work
275f3c2afb7SBram Moolenaarendif
276f3c2afb7SBram Moolenaar
277071d4279SBram Moolenaarif !exists("java_minlines")
278071d4279SBram Moolenaar  let java_minlines = 10
279071d4279SBram Moolenaarendif
280071d4279SBram Moolenaarexec "syn sync ccomment javaComment minlines=" . java_minlines
281071d4279SBram Moolenaar
282071d4279SBram Moolenaar" The default highlighting.
283*f37506f6SBram Moolenaarhi def link javaLambdaDef		Function
284*f37506f6SBram Moolenaarhi def link javaFuncDef		Function
285*f37506f6SBram Moolenaarhi def link javaVarArg			Function
286*f37506f6SBram Moolenaarhi def link javaBraces			Function
287*f37506f6SBram Moolenaarhi def link javaBranch			Conditional
288*f37506f6SBram Moolenaarhi def link javaUserLabelRef		javaUserLabel
289*f37506f6SBram Moolenaarhi def link javaLabel			Label
290*f37506f6SBram Moolenaarhi def link javaUserLabel		Label
291*f37506f6SBram Moolenaarhi def link javaConditional		Conditional
292*f37506f6SBram Moolenaarhi def link javaRepeat			Repeat
293*f37506f6SBram Moolenaarhi def link javaExceptions		Exception
294*f37506f6SBram Moolenaarhi def link javaAssert			Statement
295*f37506f6SBram Moolenaarhi def link javaStorageClass		StorageClass
296*f37506f6SBram Moolenaarhi def link javaMethodDecl		javaStorageClass
297*f37506f6SBram Moolenaarhi def link javaClassDecl		javaStorageClass
298*f37506f6SBram Moolenaarhi def link javaScopeDecl		javaStorageClass
299*f37506f6SBram Moolenaarhi def link javaBoolean		Boolean
300*f37506f6SBram Moolenaarhi def link javaSpecial		Special
301*f37506f6SBram Moolenaarhi def link javaSpecialError		Error
302*f37506f6SBram Moolenaarhi def link javaSpecialCharError	Error
303*f37506f6SBram Moolenaarhi def link javaString			String
304*f37506f6SBram Moolenaarhi def link javaCharacter		Character
305*f37506f6SBram Moolenaarhi def link javaSpecialChar		SpecialChar
306*f37506f6SBram Moolenaarhi def link javaNumber			Number
307*f37506f6SBram Moolenaarhi def link javaError			Error
308*f37506f6SBram Moolenaarhi def link javaStringError		Error
309*f37506f6SBram Moolenaarhi def link javaStatement		Statement
310*f37506f6SBram Moolenaarhi def link javaOperator		Operator
311*f37506f6SBram Moolenaarhi def link javaComment		Comment
312*f37506f6SBram Moolenaarhi def link javaDocComment		Comment
313*f37506f6SBram Moolenaarhi def link javaLineComment		Comment
314*f37506f6SBram Moolenaarhi def link javaConstant		Constant
315*f37506f6SBram Moolenaarhi def link javaTypedef		Typedef
316*f37506f6SBram Moolenaarhi def link javaTodo			Todo
317*f37506f6SBram Moolenaarhi def link javaAnnotation		PreProc
318071d4279SBram Moolenaar
319*f37506f6SBram Moolenaarhi def link javaCommentTitle		SpecialComment
320*f37506f6SBram Moolenaarhi def link javaDocTags		Special
321*f37506f6SBram Moolenaarhi def link javaDocParam		Function
322*f37506f6SBram Moolenaarhi def link javaDocSeeTagParam		Function
323*f37506f6SBram Moolenaarhi def link javaCommentStar		javaComment
324071d4279SBram Moolenaar
325*f37506f6SBram Moolenaarhi def link javaType			Type
326*f37506f6SBram Moolenaarhi def link javaExternal		Include
327071d4279SBram Moolenaar
328*f37506f6SBram Moolenaarhi def link htmlComment		Special
329*f37506f6SBram Moolenaarhi def link htmlCommentPart		Special
330*f37506f6SBram Moolenaarhi def link javaSpaceError		Error
331071d4279SBram Moolenaar
332071d4279SBram Moolenaarlet b:current_syntax = "java"
333071d4279SBram Moolenaar
334071d4279SBram Moolenaarif main_syntax == 'java'
335071d4279SBram Moolenaar  unlet main_syntax
336071d4279SBram Moolenaarendif
337071d4279SBram Moolenaar
338071d4279SBram Moolenaarlet b:spell_options="contained"
3390c5fa7d7SBram Moolenaarlet &cpo = s:cpo_save
3400c5fa7d7SBram Moolenaarunlet s:cpo_save
341071d4279SBram Moolenaar
342071d4279SBram Moolenaar" vim: ts=8
343