xref: /vim-8.2.3635/runtime/syntax/java.vim (revision 91f84f6e)
10c5fa7d7SBram Moolenaar" Vim syntax file
20c5fa7d7SBram Moolenaar" Language:	Java
3071d4279SBram Moolenaar" Maintainer:	Claudio Fleiner <[email protected]>
4*91f84f6eSBram Moolenaar" URL:          https://github.com/fleiner/vim/blob/master/runtime/syntax/java.vim
5*91f84f6eSBram Moolenaar" Last Change:	2018 July 26
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 "#\|=<"
30f37506f6SBram Moolenaarhi def link javaError2 javaError
31071d4279SBram Moolenaar
32071d4279SBram Moolenaar" keyword definitions
33071d4279SBram Moolenaarsyn keyword javaExternal	native package
34293ee4d4SBram Moolenaarsyn match javaExternal		"\<import\>\(\s\+static\>\)\?"
35071d4279SBram Moolenaarsyn keyword javaError		goto const
36071d4279SBram Moolenaarsyn keyword javaConditional	if else switch
37071d4279SBram Moolenaarsyn keyword javaRepeat		while for do
38071d4279SBram Moolenaarsyn keyword javaBoolean		true false
39071d4279SBram Moolenaarsyn keyword javaConstant	null
40071d4279SBram Moolenaarsyn keyword javaTypedef		this super
41*91f84f6eSBram Moolenaarsyn keyword javaOperator	var new instanceof
42071d4279SBram Moolenaarsyn keyword javaType		boolean char byte short int long float double
43071d4279SBram Moolenaarsyn keyword javaType		void
44071d4279SBram Moolenaarsyn keyword javaStatement	return
45071d4279SBram Moolenaarsyn keyword javaStorageClass	static synchronized transient volatile final strictfp serializable
46071d4279SBram Moolenaarsyn keyword javaExceptions	throw try catch finally
47071d4279SBram Moolenaarsyn keyword javaAssert		assert
48071d4279SBram Moolenaarsyn keyword javaMethodDecl	synchronized throws
49071d4279SBram Moolenaarsyn keyword javaClassDecl	extends implements interface
50071d4279SBram Moolenaar" to differentiate the keyword class from MyClass.class we use a match here
51071d4279SBram Moolenaarsyn match   javaTypedef		"\.\s*\<class\>"ms=s+1
52071d4279SBram Moolenaarsyn keyword javaClassDecl	enum
53071d4279SBram Moolenaarsyn match   javaClassDecl	"^class\>"
54071d4279SBram Moolenaarsyn match   javaClassDecl	"[^.]\s*\<class\>"ms=s+1
55*91f84f6eSBram Moolenaarsyn match   javaAnnotation	"@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>" contains=javaString
56a5792f58SBram Moolenaarsyn match   javaClassDecl	"@interface\>"
57071d4279SBram Moolenaarsyn keyword javaBranch		break continue nextgroup=javaUserLabelRef skipwhite
58071d4279SBram Moolenaarsyn match   javaUserLabelRef	"\k\+" contained
59a5792f58SBram Moolenaarsyn match   javaVarArg		"\.\.\."
60071d4279SBram Moolenaarsyn keyword javaScopeDecl	public protected private abstract
61071d4279SBram Moolenaar
62*91f84f6eSBram Moolenaar" Java Modules(Since Java 9, for "module-info.java" file)
63*91f84f6eSBram Moolenaarif fnamemodify(bufname("%"), ":t") == "module-info.java"
64*91f84f6eSBram Moolenaar    syn keyword javaModuleStorageClass	module transitive
65*91f84f6eSBram Moolenaar    syn keyword javaModuleStmt		open requires exports opens uses provides
66*91f84f6eSBram Moolenaar    syn keyword javaModuleExternal	to with
67*91f84f6eSBram Moolenaar    syn cluster javaTop add=javaModuleStorageClass,javaModuleStmt,javaModuleExternal
68*91f84f6eSBram Moolenaarendif
69*91f84f6eSBram Moolenaar
708ada17c4SBram Moolenaarif exists("java_highlight_java_lang_ids")
718ada17c4SBram Moolenaar  let java_highlight_all=1
728ada17c4SBram Moolenaarendif
738ada17c4SBram Moolenaarif exists("java_highlight_all")  || exists("java_highlight_java")  || exists("java_highlight_java_lang")
74071d4279SBram Moolenaar  " java.lang.*
75071d4279SBram Moolenaar  syn match javaLangClass "\<System\>"
768ada17c4SBram Moolenaar  syn keyword javaR_JavaLang NegativeArraySizeException ArrayStoreException IllegalStateException RuntimeException IndexOutOfBoundsException UnsupportedOperationException ArrayIndexOutOfBoundsException ArithmeticException ClassCastException EnumConstantNotPresentException StringIndexOutOfBoundsException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException NumberFormatException NullPointerException TypeNotPresentException SecurityException
778ada17c4SBram Moolenaar  syn cluster javaTop add=javaR_JavaLang
788ada17c4SBram Moolenaar  syn cluster javaClasses add=javaR_JavaLang
79f37506f6SBram Moolenaar  hi def link javaR_JavaLang javaR_Java
808ada17c4SBram 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
818ada17c4SBram Moolenaar  syn cluster javaTop add=javaC_JavaLang
828ada17c4SBram Moolenaar  syn cluster javaClasses add=javaC_JavaLang
83f37506f6SBram Moolenaar  hi def link javaC_JavaLang javaC_Java
848ada17c4SBram 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
858ada17c4SBram Moolenaar  syn cluster javaTop add=javaE_JavaLang
868ada17c4SBram Moolenaar  syn cluster javaClasses add=javaE_JavaLang
87f37506f6SBram Moolenaar  hi def link javaE_JavaLang javaE_Java
888ada17c4SBram Moolenaar  syn keyword javaX_JavaLang CloneNotSupportedException Exception NoSuchMethodException IllegalAccessException NoSuchFieldException Throwable InterruptedException ClassNotFoundException InstantiationException
898ada17c4SBram Moolenaar  syn cluster javaTop add=javaX_JavaLang
908ada17c4SBram Moolenaar  syn cluster javaClasses add=javaX_JavaLang
91f37506f6SBram Moolenaar  hi def link javaX_JavaLang javaX_Java
928ada17c4SBram Moolenaar
93f37506f6SBram Moolenaar  hi def link javaR_Java javaR_
94f37506f6SBram Moolenaar  hi def link javaC_Java javaC_
95f37506f6SBram Moolenaar  hi def link javaE_Java javaE_
96f37506f6SBram Moolenaar  hi def link javaX_Java javaX_
97f37506f6SBram Moolenaar  hi def link javaX_		     javaExceptions
98f37506f6SBram Moolenaar  hi def link javaR_		     javaExceptions
99f37506f6SBram Moolenaar  hi def link javaE_		     javaExceptions
100f37506f6SBram Moolenaar  hi def link javaC_		     javaConstant
1018ada17c4SBram Moolenaar
102071d4279SBram Moolenaar  syn keyword javaLangObject clone equals finalize getClass hashCode
103071d4279SBram Moolenaar  syn keyword javaLangObject notify notifyAll toString wait
104f37506f6SBram Moolenaar  hi def link javaLangObject		     javaConstant
1058ada17c4SBram Moolenaar  syn cluster javaTop add=javaLangObject
106071d4279SBram Moolenaarendif
107071d4279SBram Moolenaar
108071d4279SBram Moolenaarif filereadable(expand("<sfile>:p:h")."/javaid.vim")
109071d4279SBram Moolenaar  source <sfile>:p:h/javaid.vim
110071d4279SBram Moolenaarendif
111071d4279SBram Moolenaar
112071d4279SBram Moolenaarif exists("java_space_errors")
113071d4279SBram Moolenaar  if !exists("java_no_trail_space_error")
114071d4279SBram Moolenaar    syn match	javaSpaceError	"\s\+$"
115071d4279SBram Moolenaar  endif
116071d4279SBram Moolenaar  if !exists("java_no_tab_space_error")
117071d4279SBram Moolenaar    syn match	javaSpaceError	" \+\t"me=e-1
118071d4279SBram Moolenaar  endif
119071d4279SBram Moolenaarendif
120071d4279SBram Moolenaar
121f3c2afb7SBram Moolenaarsyn region  javaLabelRegion	transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter,javaString
122071d4279SBram Moolenaarsyn match   javaUserLabel	"^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
123071d4279SBram Moolenaarsyn keyword javaLabel		default
124071d4279SBram Moolenaar
125b6b046b2SBram Moolenaar" highlighting C++ keywords as errors removed, too many people find it
126b6b046b2SBram Moolenaar" annoying.  Was: if !exists("java_allow_cpp_keywords")
127071d4279SBram Moolenaar
128071d4279SBram Moolenaar" The following cluster contains all java groups except the contained ones
129a5792f58SBram 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
130071d4279SBram Moolenaar
131071d4279SBram Moolenaar
132071d4279SBram Moolenaar" Comments
133071d4279SBram Moolenaarsyn keyword javaTodo		 contained TODO FIXME XXX
134071d4279SBram Moolenaarif exists("java_comment_strings")
135071d4279SBram Moolenaar  syn region  javaCommentString    contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
136071d4279SBram Moolenaar  syn region  javaComment2String   contained start=+"+	end=+$\|"+  contains=javaSpecial,javaSpecialChar,@Spell
137071d4279SBram Moolenaar  syn match   javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
138071d4279SBram Moolenaar  syn match   javaCommentCharacter contained "'\\''" contains=javaSpecialChar
139071d4279SBram Moolenaar  syn match   javaCommentCharacter contained "'[^\\]'"
140071d4279SBram Moolenaar  syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
141071d4279SBram Moolenaar  syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
142071d4279SBram Moolenaarendif
143071d4279SBram Moolenaarsyn region  javaComment		 start="/\*"  end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
144071d4279SBram Moolenaarsyn match   javaCommentStar	 contained "^\s*\*[^/]"me=e-1
145071d4279SBram Moolenaarsyn match   javaCommentStar	 contained "^\s*\*$"
146071d4279SBram Moolenaarsyn match   javaLineComment	 "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
147f37506f6SBram Moolenaarhi def link javaCommentString javaString
148f37506f6SBram Moolenaarhi def link javaComment2String javaString
149f37506f6SBram Moolenaarhi def link javaCommentCharacter javaCharacter
150071d4279SBram Moolenaar
151071d4279SBram Moolenaarsyn cluster javaTop add=javaComment,javaLineComment
152071d4279SBram Moolenaar
153071d4279SBram Moolenaarif !exists("java_ignore_javadoc") && main_syntax != 'jsp'
154071d4279SBram Moolenaar  syntax case ignore
155071d4279SBram Moolenaar  " syntax coloring for javadoc comments (HTML)
156071d4279SBram Moolenaar  syntax include @javaHtml <sfile>:p:h/html.vim
157071d4279SBram Moolenaar  unlet b:current_syntax
1585c73622aSBram Moolenaar  " HTML enables spell checking for all text that is not in a syntax item. This
1595c73622aSBram Moolenaar  " is wrong for Java (all identifiers would be spell-checked), so it's undone
1605c73622aSBram Moolenaar  " here.
1615c73622aSBram Moolenaar  syntax spell default
1625c73622aSBram Moolenaar
1638ada17c4SBram Moolenaar  syn region  javaDocComment	start="/\*\*"  end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
1648ada17c4SBram 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
165071d4279SBram Moolenaar
1660c5fa7d7SBram Moolenaar  syn region javaDocTags	 contained start="{@\(code\|link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
1678ada17c4SBram Moolenaar  syn match  javaDocTags	 contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
168071d4279SBram Moolenaar  syn match  javaDocParam	 contained "\s\S\+"
169071d4279SBram Moolenaar  syn match  javaDocTags	 contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
1708ada17c4SBram Moolenaar  syn region javaDocSeeTag	 contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
1718ada17c4SBram Moolenaar  syn match  javaDocSeeTagParam  contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
172071d4279SBram Moolenaar  syntax case match
173071d4279SBram Moolenaarendif
174071d4279SBram Moolenaar
175071d4279SBram Moolenaar" match the special comment /**/
176071d4279SBram Moolenaarsyn match   javaComment		 "/\*\*/"
177071d4279SBram Moolenaar
178071d4279SBram Moolenaar" Strings and constants
179071d4279SBram Moolenaarsyn match   javaSpecialError	 contained "\\."
180071d4279SBram Moolenaarsyn match   javaSpecialCharError contained "[^']"
18100a927d6SBram Moolenaarsyn match   javaSpecialChar	 contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
182071d4279SBram Moolenaarsyn region  javaString		start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
183071d4279SBram Moolenaar" next line disabled, it can cause a crash for a long line
184071d4279SBram Moolenaar"syn match   javaStringError	  +"\([^"\\]\|\\.\)*$+
185071d4279SBram Moolenaarsyn match   javaCharacter	 "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
186071d4279SBram Moolenaarsyn match   javaCharacter	 "'\\''" contains=javaSpecialChar
187071d4279SBram Moolenaarsyn match   javaCharacter	 "'[^\\]'"
188f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\<\(0[bB][0-1]\+\|0[0-7]*\|0[xX]\x\+\|\d\(\d\|_\d\)*\)[lL]\=\>"
189f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\(\<\d\(\d\|_\d\)*\.\(\d\(\d\|_\d\)*\)\=\|\.\d\(\d\|_\d\)*\)\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\="
190f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\<\d\(\d\|_\d\)*[eE][-+]\=\d\(\d\|_\d\)*[fFdD]\=\>"
191f3c2afb7SBram Moolenaarsyn match   javaNumber		 "\<\d\(\d\|_\d\)*\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\>"
192071d4279SBram Moolenaar
193071d4279SBram Moolenaar" unicode characters
19400a927d6SBram Moolenaarsyn match   javaSpecial "\\u\d\{4\}"
195071d4279SBram Moolenaar
196071d4279SBram Moolenaarsyn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
197071d4279SBram Moolenaar
198071d4279SBram Moolenaarif exists("java_highlight_functions")
199071d4279SBram Moolenaar  if java_highlight_functions == "indent"
200f3c2afb7SBram Moolenaar    syn match  javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
201f3c2afb7SBram Moolenaar    syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
202f3c2afb7SBram Moolenaar    syn match  javaFuncDef "^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
203f3c2afb7SBram Moolenaar    syn region javaFuncDef start=+^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
204071d4279SBram Moolenaar  else
205071d4279SBram Moolenaar    " This line catches method declarations at any indentation>0, but it assumes
206071d4279SBram Moolenaar    " two things:
207071d4279SBram Moolenaar    "	1. class names are always capitalized (ie: Button)
208071d4279SBram Moolenaar    "	2. method names are never capitalized (except constructors, of course)
209f3c2afb7SBram 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
210f3c2afb7SBram 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
211071d4279SBram Moolenaar  endif
212f3c2afb7SBram Moolenaar  syn match javaLambdaDef "[a-zA-Z_][a-zA-Z0-9_]*\s*->"
213071d4279SBram Moolenaar  syn match  javaBraces  "[{}]"
214f3c2afb7SBram Moolenaar  syn cluster javaTop add=javaFuncDef,javaBraces,javaLambdaDef
215071d4279SBram Moolenaarendif
216071d4279SBram Moolenaar
217071d4279SBram Moolenaarif exists("java_highlight_debug")
218071d4279SBram Moolenaar
219071d4279SBram Moolenaar  " Strings and constants
220071d4279SBram Moolenaar  syn match   javaDebugSpecial		contained "\\\d\d\d\|\\."
221071d4279SBram Moolenaar  syn region  javaDebugString		contained start=+"+  end=+"+  contains=javaDebugSpecial
222071d4279SBram Moolenaar  syn match   javaDebugStringError	+"\([^"\\]\|\\.\)*$+
223071d4279SBram Moolenaar  syn match   javaDebugCharacter	contained "'[^\\]'"
224071d4279SBram Moolenaar  syn match   javaDebugSpecialCharacter contained "'\\.'"
225071d4279SBram Moolenaar  syn match   javaDebugSpecialCharacter contained "'\\''"
226071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
227071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
228071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
229071d4279SBram Moolenaar  syn match   javaDebugNumber		contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
230071d4279SBram Moolenaar  syn keyword javaDebugBoolean		contained true false
231071d4279SBram Moolenaar  syn keyword javaDebugType		contained null this super
232071d4279SBram Moolenaar  syn region javaDebugParen  start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
233071d4279SBram Moolenaar
234071d4279SBram Moolenaar  " to make this work you must define the highlighting for these groups
235071d4279SBram Moolenaar  syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
236293ee4d4SBram Moolenaar  syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
237071d4279SBram Moolenaar  syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
238071d4279SBram Moolenaar  syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
239071d4279SBram Moolenaar
240071d4279SBram Moolenaar  syn cluster javaTop add=javaDebug
241071d4279SBram Moolenaar
242f37506f6SBram Moolenaar  hi def link javaDebug		 Debug
243f37506f6SBram Moolenaar  hi def link javaDebugString		 DebugString
244f37506f6SBram Moolenaar  hi def link javaDebugStringError	 javaError
245f37506f6SBram Moolenaar  hi def link javaDebugType		 DebugType
246f37506f6SBram Moolenaar  hi def link javaDebugBoolean		 DebugBoolean
247f37506f6SBram Moolenaar  hi def link javaDebugNumber		 Debug
248f37506f6SBram Moolenaar  hi def link javaDebugSpecial		 DebugSpecial
249f37506f6SBram Moolenaar  hi def link javaDebugSpecialCharacter DebugSpecial
250f37506f6SBram Moolenaar  hi def link javaDebugCharacter	 DebugString
251f37506f6SBram Moolenaar  hi def link javaDebugParen		 Debug
252071d4279SBram Moolenaar
253f37506f6SBram Moolenaar  hi def link DebugString		 String
254f37506f6SBram Moolenaar  hi def link DebugSpecial		 Special
255f37506f6SBram Moolenaar  hi def link DebugBoolean		 Boolean
256f37506f6SBram Moolenaar  hi def link DebugType		 Type
257071d4279SBram Moolenaarendif
258071d4279SBram Moolenaar
259071d4279SBram Moolenaarif exists("java_mark_braces_in_parens_as_errors")
260071d4279SBram Moolenaar  syn match javaInParen		 contained "[{}]"
261f37506f6SBram Moolenaar  hi def link javaInParen	javaError
262071d4279SBram Moolenaar  syn cluster javaTop add=javaInParen
263071d4279SBram Moolenaarendif
264071d4279SBram Moolenaar
265071d4279SBram Moolenaar" catch errors caused by wrong parenthesis
266071d4279SBram Moolenaarsyn region  javaParenT	transparent matchgroup=javaParen  start="(" end=")" contains=@javaTop,javaParenT1
267071d4279SBram Moolenaarsyn region  javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
268071d4279SBram Moolenaarsyn region  javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT  contained
269071d4279SBram Moolenaarsyn match   javaParenError	 ")"
270293ee4d4SBram Moolenaar" catch errors caused by wrong square parenthesis
271293ee4d4SBram Moolenaarsyn region  javaParenT	transparent matchgroup=javaParen  start="\[" end="\]" contains=@javaTop,javaParenT1
272293ee4d4SBram Moolenaarsyn region  javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
273293ee4d4SBram Moolenaarsyn region  javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT  contained
274293ee4d4SBram Moolenaarsyn match   javaParenError	 "\]"
275293ee4d4SBram Moolenaar
276f37506f6SBram Moolenaarhi def link javaParenError	javaError
277071d4279SBram Moolenaar
278f3c2afb7SBram Moolenaarif exists("java_highlight_functions")
279f3c2afb7SBram Moolenaar   syn match javaLambdaDef "([a-zA-Z0-9_<>\[\], \t]*)\s*->"
280f3c2afb7SBram Moolenaar   " needs to be defined after the parenthesis error catcher to work
281f3c2afb7SBram Moolenaarendif
282f3c2afb7SBram Moolenaar
283071d4279SBram Moolenaarif !exists("java_minlines")
284071d4279SBram Moolenaar  let java_minlines = 10
285071d4279SBram Moolenaarendif
286071d4279SBram Moolenaarexec "syn sync ccomment javaComment minlines=" . java_minlines
287071d4279SBram Moolenaar
288071d4279SBram Moolenaar" The default highlighting.
289f37506f6SBram Moolenaarhi def link javaLambdaDef		Function
290f37506f6SBram Moolenaarhi def link javaFuncDef		Function
291f37506f6SBram Moolenaarhi def link javaVarArg			Function
292f37506f6SBram Moolenaarhi def link javaBraces			Function
293f37506f6SBram Moolenaarhi def link javaBranch			Conditional
294f37506f6SBram Moolenaarhi def link javaUserLabelRef		javaUserLabel
295f37506f6SBram Moolenaarhi def link javaLabel			Label
296f37506f6SBram Moolenaarhi def link javaUserLabel		Label
297f37506f6SBram Moolenaarhi def link javaConditional		Conditional
298f37506f6SBram Moolenaarhi def link javaRepeat			Repeat
299f37506f6SBram Moolenaarhi def link javaExceptions		Exception
300f37506f6SBram Moolenaarhi def link javaAssert			Statement
301f37506f6SBram Moolenaarhi def link javaStorageClass		StorageClass
302f37506f6SBram Moolenaarhi def link javaMethodDecl		javaStorageClass
303f37506f6SBram Moolenaarhi def link javaClassDecl		javaStorageClass
304f37506f6SBram Moolenaarhi def link javaScopeDecl		javaStorageClass
305*91f84f6eSBram Moolenaar
306f37506f6SBram Moolenaarhi def link javaBoolean		Boolean
307f37506f6SBram Moolenaarhi def link javaSpecial		Special
308f37506f6SBram Moolenaarhi def link javaSpecialError		Error
309f37506f6SBram Moolenaarhi def link javaSpecialCharError	Error
310f37506f6SBram Moolenaarhi def link javaString			String
311f37506f6SBram Moolenaarhi def link javaCharacter		Character
312f37506f6SBram Moolenaarhi def link javaSpecialChar		SpecialChar
313f37506f6SBram Moolenaarhi def link javaNumber			Number
314f37506f6SBram Moolenaarhi def link javaError			Error
315f37506f6SBram Moolenaarhi def link javaStringError		Error
316f37506f6SBram Moolenaarhi def link javaStatement		Statement
317f37506f6SBram Moolenaarhi def link javaOperator		Operator
318f37506f6SBram Moolenaarhi def link javaComment		Comment
319f37506f6SBram Moolenaarhi def link javaDocComment		Comment
320f37506f6SBram Moolenaarhi def link javaLineComment		Comment
321f37506f6SBram Moolenaarhi def link javaConstant		Constant
322f37506f6SBram Moolenaarhi def link javaTypedef		Typedef
323f37506f6SBram Moolenaarhi def link javaTodo			Todo
324f37506f6SBram Moolenaarhi def link javaAnnotation		PreProc
325071d4279SBram Moolenaar
326f37506f6SBram Moolenaarhi def link javaCommentTitle		SpecialComment
327f37506f6SBram Moolenaarhi def link javaDocTags		Special
328f37506f6SBram Moolenaarhi def link javaDocParam		Function
329f37506f6SBram Moolenaarhi def link javaDocSeeTagParam		Function
330f37506f6SBram Moolenaarhi def link javaCommentStar		javaComment
331071d4279SBram Moolenaar
332f37506f6SBram Moolenaarhi def link javaType			Type
333f37506f6SBram Moolenaarhi def link javaExternal		Include
334071d4279SBram Moolenaar
335f37506f6SBram Moolenaarhi def link htmlComment		Special
336f37506f6SBram Moolenaarhi def link htmlCommentPart		Special
337f37506f6SBram Moolenaarhi def link javaSpaceError		Error
338071d4279SBram Moolenaar
339*91f84f6eSBram Moolenaarif fnamemodify(bufname("%"), ":t") == "module-info.java"
340*91f84f6eSBram Moolenaar    hi def link javaModuleStorageClass	StorageClass
341*91f84f6eSBram Moolenaar    hi def link javaModuleStmt		Statement
342*91f84f6eSBram Moolenaar    hi def link javaModuleExternal	Include
343*91f84f6eSBram Moolenaarendif
344*91f84f6eSBram Moolenaar
345071d4279SBram Moolenaarlet b:current_syntax = "java"
346071d4279SBram Moolenaar
347071d4279SBram Moolenaarif main_syntax == 'java'
348071d4279SBram Moolenaar  unlet main_syntax
349071d4279SBram Moolenaarendif
350071d4279SBram Moolenaar
351071d4279SBram Moolenaarlet b:spell_options="contained"
3520c5fa7d7SBram Moolenaarlet &cpo = s:cpo_save
3530c5fa7d7SBram Moolenaarunlet s:cpo_save
354071d4279SBram Moolenaar
355071d4279SBram Moolenaar" vim: ts=8
356