blob: 1b940ebd39383bfa57c915403b386bd56afbcfc7 [file] [log] [blame]
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +02001" Vim syntax file
2" Language: Java
Bram Moolenaar00a927d2010-05-14 23:24:24 +02003" Maintainer: Claudio Fleiner <claudio@fleiner.com>
Bram Moolenaar91f84f62018-07-29 15:07:52 +02004" URL: https://github.com/fleiner/vim/blob/master/runtime/syntax/java.vim
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +01005" Last Change: 2024 Feb 27
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
7" Please check :help java.vim for comments on some of the options available.
8
Bram Moolenaar89bcfda2016-08-30 23:26:57 +02009" quit when a syntax file was already loaded
Bram Moolenaar071d4272004-06-13 20:20:40 +000010if !exists("main_syntax")
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020011 if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000012 finish
13 endif
14 " we define it here so that included files can test for it
15 let main_syntax='java'
Bram Moolenaar5c736222010-01-06 20:54:52 +010016 syn region javaFold start="{" end="}" transparent fold
Bram Moolenaar071d4272004-06-13 20:20:40 +000017endif
18
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020019let s:cpo_save = &cpo
20set cpo&vim
21
Bram Moolenaar071d4272004-06-13 20:20:40 +000022" some characters that cannot be in a java program (outside a string)
23syn match javaError "[\\@`]"
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +010024syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +020025
Bram Moolenaar071d4272004-06-13 20:20:40 +000026" use separate name so that it can be deleted in javacc.vim
27syn match javaError2 "#\|=<"
Bram Moolenaarf37506f2016-08-31 22:22:10 +020028hi def link javaError2 javaError
Bram Moolenaar071d4272004-06-13 20:20:40 +000029
Bram Moolenaar071d4272004-06-13 20:20:40 +000030" keyword definitions
31syn keyword javaExternal native package
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000032syn match javaExternal "\<import\>\(\s\+static\>\)\?"
Bram Moolenaar071d4272004-06-13 20:20:40 +000033syn keyword javaError goto const
34syn keyword javaConditional if else switch
35syn keyword javaRepeat while for do
36syn keyword javaBoolean true false
37syn keyword javaConstant null
38syn keyword javaTypedef this super
Bram Moolenaar91f84f62018-07-29 15:07:52 +020039syn keyword javaOperator var new instanceof
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +010040" Since the yield statement, which could take a parenthesised operand,
41" and _qualified_ yield methods get along within the switch block
42" (JLS-17, ยง3.8), it seems futile to make a region definition for this
43" block; instead look for the _yield_ word alone, and if found,
44" backtrack (arbitrarily) 80 bytes, at most, on the matched line and,
45" if necessary, on the line before that (h: \@<=), trying to match
46" neither a method reference nor a qualified method invocation.
47syn match javaOperator "\%(\%(::\|\.\)[[:space:]\n]*\)\@80<!\<yield\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000048syn keyword javaType boolean char byte short int long float double
49syn keyword javaType void
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +010050syn keyword javaStatement return
Bram Moolenaar071d4272004-06-13 20:20:40 +000051syn keyword javaStorageClass static synchronized transient volatile final strictfp serializable
52syn keyword javaExceptions throw try catch finally
53syn keyword javaAssert assert
54syn keyword javaMethodDecl synchronized throws
55syn keyword javaClassDecl extends implements interface
56" to differentiate the keyword class from MyClass.class we use a match here
57syn match javaTypedef "\.\s*\<class\>"ms=s+1
58syn keyword javaClassDecl enum
59syn match javaClassDecl "^class\>"
60syn match javaClassDecl "[^.]\s*\<class\>"ms=s+1
Bram Moolenaar91f84f62018-07-29 15:07:52 +020061syn match javaAnnotation "@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>" contains=javaString
Bram Moolenaar00a927d2010-05-14 23:24:24 +020062syn match javaClassDecl "@interface\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000063syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite
64syn match javaUserLabelRef "\k\+" contained
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000065syn match javaVarArg "\.\.\."
Bram Moolenaar071d4272004-06-13 20:20:40 +000066syn keyword javaScopeDecl public protected private abstract
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +010067syn match javaConceptKind "\<default\>\%(\s*\%(:\|->\)\)\@!"
Bram Moolenaar071d4272004-06-13 20:20:40 +000068
Bram Moolenaar63f32602022-06-09 20:45:54 +010069function s:isModuleInfoDeclarationCurrentBuffer() abort
70 return fnamemodify(bufname("%"), ":t") =~ '^module-info\%(\.class\>\)\@!'
71endfunction
72
Bram Moolenaar91f84f62018-07-29 15:07:52 +020073" Java Modules(Since Java 9, for "module-info.java" file)
Bram Moolenaar63f32602022-06-09 20:45:54 +010074if s:isModuleInfoDeclarationCurrentBuffer()
Bram Moolenaar91f84f62018-07-29 15:07:52 +020075 syn keyword javaModuleStorageClass module transitive
76 syn keyword javaModuleStmt open requires exports opens uses provides
77 syn keyword javaModuleExternal to with
78 syn cluster javaTop add=javaModuleStorageClass,javaModuleStmt,javaModuleExternal
79endif
80
Bram Moolenaar8ada17c2006-01-19 22:16:24 +000081if exists("java_highlight_java_lang_ids")
82 let java_highlight_all=1
83endif
Bram Moolenaar91f84f62018-07-29 15:07:52 +020084if exists("java_highlight_all") || exists("java_highlight_java") || exists("java_highlight_java_lang")
Bram Moolenaar071d4272004-06-13 20:20:40 +000085 " java.lang.*
Bram Moolenaar63f32602022-06-09 20:45:54 +010086 "
87 " The keywords of javaR_JavaLang, javaC_JavaLang, javaE_JavaLang,
88 " and javaX_JavaLang are sub-grouped according to the Java version
89 " of their introduction, and sub-group keywords (that is, class
90 " names) are arranged in alphabetical order, so that future newer
91 " keywords can be pre-sorted and appended without disturbing
92 " the current keyword placement. The below _match_es follow suit.
93
94 syn keyword javaR_JavaLang ArithmeticException ArrayIndexOutOfBoundsException ArrayStoreException ClassCastException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException IndexOutOfBoundsException NegativeArraySizeException NullPointerException NumberFormatException RuntimeException SecurityException StringIndexOutOfBoundsException IllegalStateException UnsupportedOperationException EnumConstantNotPresentException TypeNotPresentException IllegalCallerException LayerInstantiationException
Bram Moolenaar8ada17c2006-01-19 22:16:24 +000095 syn cluster javaTop add=javaR_JavaLang
96 syn cluster javaClasses add=javaR_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +020097 hi def link javaR_JavaLang javaR_Java
Bram Moolenaar63f32602022-06-09 20:45:54 +010098 " Member enumerations:
99 syn match javaC_JavaLang "\%(\<Thread\.\)\@<=\<State\>"
100 syn match javaC_JavaLang "\%(\<Character\.\)\@<=\<UnicodeScript\>"
101 syn match javaC_JavaLang "\%(\<ProcessBuilder\.Redirect\.\)\@<=\<Type\>"
102 syn match javaC_JavaLang "\%(\<StackWalker\.\)\@<=\<Option\>"
103 syn match javaC_JavaLang "\%(\<System\.Logger\.\)\@<=\<Level\>"
104 " Member classes:
105 syn match javaC_JavaLang "\%(\<Character\.\)\@<=\<Subset\>"
106 syn match javaC_JavaLang "\%(\<Character\.\)\@<=\<UnicodeBlock\>"
107 syn match javaC_JavaLang "\%(\<ProcessBuilder\.\)\@<=\<Redirect\>"
108 syn match javaC_JavaLang "\%(\<ModuleLayer\.\)\@<=\<Controller\>"
109 syn match javaC_JavaLang "\%(\<Runtime\.\)\@<=\<Version\>"
110 syn match javaC_JavaLang "\%(\<System\.\)\@<=\<LoggerFinder\>"
111 syn match javaC_JavaLang "\%(\<Enum\.\)\@<=\<EnumDesc\>"
112 syn keyword javaC_JavaLang Boolean Character Class ClassLoader Compiler Double Float Integer Long Math Number Object Process Runtime SecurityManager String StringBuffer Thread ThreadGroup Byte Short Void InheritableThreadLocal Package RuntimePermission ThreadLocal StrictMath StackTraceElement Enum ProcessBuilder StringBuilder ClassValue Module ModuleLayer StackWalker Record
113 syn match javaC_JavaLang "\<System\>" " See javaDebug.
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000114 syn cluster javaTop add=javaC_JavaLang
115 syn cluster javaClasses add=javaC_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200116 hi def link javaC_JavaLang javaC_Java
Bram Moolenaar63f32602022-06-09 20:45:54 +0100117 syn keyword javaE_JavaLang AbstractMethodError ClassCircularityError ClassFormatError Error IllegalAccessError IncompatibleClassChangeError InstantiationError InternalError LinkageError NoClassDefFoundError NoSuchFieldError NoSuchMethodError OutOfMemoryError StackOverflowError ThreadDeath UnknownError UnsatisfiedLinkError VerifyError VirtualMachineError ExceptionInInitializerError UnsupportedClassVersionError AssertionError BootstrapMethodError
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000118 syn cluster javaTop add=javaE_JavaLang
119 syn cluster javaClasses add=javaE_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200120 hi def link javaE_JavaLang javaE_Java
Bram Moolenaar63f32602022-06-09 20:45:54 +0100121 syn keyword javaX_JavaLang ClassNotFoundException CloneNotSupportedException Exception IllegalAccessException InstantiationException InterruptedException NoSuchMethodException Throwable NoSuchFieldException ReflectiveOperationException
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000122 syn cluster javaTop add=javaX_JavaLang
123 syn cluster javaClasses add=javaX_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200124 hi def link javaX_JavaLang javaX_Java
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000125
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200126 hi def link javaR_Java javaR_
127 hi def link javaC_Java javaC_
128 hi def link javaE_Java javaE_
129 hi def link javaX_Java javaX_
130 hi def link javaX_ javaExceptions
131 hi def link javaR_ javaExceptions
132 hi def link javaE_ javaExceptions
133 hi def link javaC_ javaConstant
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000134
Bram Moolenaar071d4272004-06-13 20:20:40 +0000135 syn keyword javaLangObject clone equals finalize getClass hashCode
136 syn keyword javaLangObject notify notifyAll toString wait
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200137 hi def link javaLangObject javaConstant
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000138 syn cluster javaTop add=javaLangObject
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139endif
140
141if filereadable(expand("<sfile>:p:h")."/javaid.vim")
142 source <sfile>:p:h/javaid.vim
143endif
144
145if exists("java_space_errors")
146 if !exists("java_no_trail_space_error")
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200147 syn match javaSpaceError "\s\+$"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000148 endif
149 if !exists("java_no_tab_space_error")
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200150 syn match javaSpaceError " \+\t"me=e-1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151 endif
152endif
153
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +0100154syn match javaUserLabel "^\s*\<\K\k*\>\%(\<default\>\)\@<!\s*:"he=e-1
155syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaLabelCastType,javaLabelNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
156syn region javaLabelRegion transparent matchgroup=javaLabel start="\<default\>\%(\s*\%(:\|->\)\)\@=" matchgroup=NONE end=":\|->" oneline
157" Consider grouped _default_ _case_ labels, i.e.
158" case null, default ->
159" case null: default:
160syn keyword javaLabelDefault contained default
161syn keyword javaLabelVarType contained var
162syn keyword javaLabelCastType contained char byte short int
163" Allow for the contingency of the enclosing region not being able to
164" _keep_ its _end_, e.g. case ':':.
165syn region javaLabelWhenClause contained transparent matchgroup=javaLabel start="\<when\>" matchgroup=NONE end=":"me=e-1 end="->"me=e-2 contains=TOP,javaExternal
166syn match javaLabelNumber contained "\<0\>[lL]\@!"
167syn match javaLabelNumber contained "\<\%(0\%([xX]\x\%(_*\x\)*\|_*\o\%(_*\o\)*\|[bB][01]\%(_*[01]\)*\)\|[1-9]\%(_*\d\)*\)\>[lL]\@!"
168hi def link javaLabelDefault javaLabel
169hi def link javaLabelVarType javaOperator
170hi def link javaLabelNumber javaNumber
171hi def link javaLabelCastType javaType
Bram Moolenaar071d4272004-06-13 20:20:40 +0000172
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100173" highlighting C++ keywords as errors removed, too many people find it
174" annoying. Was: if !exists("java_allow_cpp_keywords")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000175
176" The following cluster contains all java groups except the contained ones
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +0100177syn cluster javaTop add=javaExternal,javaError,javaBranch,javaLabelRegion,javaConditional,javaRepeat,javaBoolean,javaConstant,javaTypedef,javaOperator,javaType,javaStatement,javaStorageClass,javaAssert,javaExceptions,javaMethodDecl,javaClassDecl,javaScopeDecl,javaConceptKind,javaError2,javaUserLabel,javaLangObject,javaAnnotation,javaVarArg
Bram Moolenaar071d4272004-06-13 20:20:40 +0000178
179
180" Comments
181syn keyword javaTodo contained TODO FIXME XXX
182if exists("java_comment_strings")
183 syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200184 syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185 syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
186 syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar
187 syn match javaCommentCharacter contained "'[^\\]'"
188 syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
189 syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
190endif
191syn region javaComment start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200192syn match javaCommentStar contained "^\s*\*[^/]"me=e-1
193syn match javaCommentStar contained "^\s*\*$"
194syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200195hi def link javaCommentString javaString
196hi def link javaComment2String javaString
197hi def link javaCommentCharacter javaCharacter
Bram Moolenaar071d4272004-06-13 20:20:40 +0000198
199syn cluster javaTop add=javaComment,javaLineComment
200
201if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
202 syntax case ignore
203 " syntax coloring for javadoc comments (HTML)
Bram Moolenaar63f32602022-06-09 20:45:54 +0100204 syntax include @javaHtml syntax/html.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205 unlet b:current_syntax
Bram Moolenaar5c736222010-01-06 20:54:52 +0100206 " HTML enables spell checking for all text that is not in a syntax item. This
207 " is wrong for Java (all identifiers would be spell-checked), so it's undone
208 " here.
209 syntax spell default
210
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200211 syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
212 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000213
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200214 syn region javaDocTags contained start="{@\(code\|link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200215 syn match javaDocTags contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
216 syn match javaDocParam contained "\s\S\+"
217 syn match javaDocTags contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
218 syn region javaDocSeeTag contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000219 syn match javaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000220 syntax case match
221endif
222
223" match the special comment /**/
224syn match javaComment "/\*\*/"
225
226" Strings and constants
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200227syn match javaSpecialError contained "\\."
Bram Moolenaar071d4272004-06-13 20:20:40 +0000228syn match javaSpecialCharError contained "[^']"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200229syn match javaSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000230syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
231" next line disabled, it can cause a crash for a long line
232"syn match javaStringError +"\([^"\\]\|\\.\)*$+
233syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
234syn match javaCharacter "'\\''" contains=javaSpecialChar
235syn match javaCharacter "'[^\\]'"
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100236syn match javaNumber "\<\(0[bB][0-1]\+\|0[0-7]*\|0[xX]\x\+\|\d\(\d\|_\d\)*\)[lL]\=\>"
237syn match javaNumber "\(\<\d\(\d\|_\d\)*\.\(\d\(\d\|_\d\)*\)\=\|\.\d\(\d\|_\d\)*\)\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\="
238syn match javaNumber "\<\d\(\d\|_\d\)*[eE][-+]\=\d\(\d\|_\d\)*[fFdD]\=\>"
239syn match javaNumber "\<\d\(\d\|_\d\)*\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000240
241" unicode characters
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200242syn match javaSpecial "\\u\d\{4\}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000243
244syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
245
246if exists("java_highlight_functions")
247 if java_highlight_functions == "indent"
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100248 syn match javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
249 syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
250 syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
251 syn region javaFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
Bram Moolenaar071d4272004-06-13 20:20:40 +0000252 else
253 " This line catches method declarations at any indentation>0, but it assumes
254 " two things:
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200255 " 1. class names are always capitalized (ie: Button)
256 " 2. method names are never capitalized (except constructors, of course)
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100257 "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
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +0100258 syn region javaFuncDef start=+^\s\+\%(\%(public\|protected\|private\|static\|\%(abstract\|default\)\|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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000259 endif
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +0100260 syn match javaLambdaDef "\<\K\k*\>\%(\<default\>\)\@<!\s*->"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000261 syn match javaBraces "[{}]"
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100262 syn cluster javaTop add=javaFuncDef,javaBraces,javaLambdaDef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000263endif
264
265if exists("java_highlight_debug")
266
267 " Strings and constants
268 syn match javaDebugSpecial contained "\\\d\d\d\|\\."
269 syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200270 syn match javaDebugStringError +"\([^"\\]\|\\.\)*$+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000271 syn match javaDebugCharacter contained "'[^\\]'"
272 syn match javaDebugSpecialCharacter contained "'\\.'"
273 syn match javaDebugSpecialCharacter contained "'\\''"
274 syn match javaDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
275 syn match javaDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
276 syn match javaDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
277 syn match javaDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
278 syn keyword javaDebugBoolean contained true false
279 syn keyword javaDebugType contained null this super
280 syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
281
282 " to make this work you must define the highlighting for these groups
283 syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000284 syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar071d4272004-06-13 20:20:40 +0000285 syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
286 syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
287
288 syn cluster javaTop add=javaDebug
289
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200290 hi def link javaDebug Debug
291 hi def link javaDebugString DebugString
292 hi def link javaDebugStringError javaError
293 hi def link javaDebugType DebugType
294 hi def link javaDebugBoolean DebugBoolean
295 hi def link javaDebugNumber Debug
296 hi def link javaDebugSpecial DebugSpecial
297 hi def link javaDebugSpecialCharacter DebugSpecial
298 hi def link javaDebugCharacter DebugString
299 hi def link javaDebugParen Debug
Bram Moolenaar071d4272004-06-13 20:20:40 +0000300
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200301 hi def link DebugString String
302 hi def link DebugSpecial Special
303 hi def link DebugBoolean Boolean
304 hi def link DebugType Type
Bram Moolenaar071d4272004-06-13 20:20:40 +0000305endif
306
307if exists("java_mark_braces_in_parens_as_errors")
308 syn match javaInParen contained "[{}]"
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200309 hi def link javaInParen javaError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000310 syn cluster javaTop add=javaInParen
311endif
312
313" catch errors caused by wrong parenthesis
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100314syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000315syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
316syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200317syn match javaParenError ")"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000318" catch errors caused by wrong square parenthesis
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100319syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000320syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
321syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200322syn match javaParenError "\]"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000323
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200324hi def link javaParenError javaError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000325
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100326if exists("java_highlight_functions")
327 syn match javaLambdaDef "([a-zA-Z0-9_<>\[\], \t]*)\s*->"
328 " needs to be defined after the parenthesis error catcher to work
329endif
330
Bram Moolenaar071d4272004-06-13 20:20:40 +0000331if !exists("java_minlines")
332 let java_minlines = 10
333endif
334exec "syn sync ccomment javaComment minlines=" . java_minlines
335
336" The default highlighting.
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200337hi def link javaLambdaDef Function
338hi def link javaFuncDef Function
339hi def link javaVarArg Function
340hi def link javaBraces Function
341hi def link javaBranch Conditional
342hi def link javaUserLabelRef javaUserLabel
343hi def link javaLabel Label
344hi def link javaUserLabel Label
345hi def link javaConditional Conditional
346hi def link javaRepeat Repeat
347hi def link javaExceptions Exception
348hi def link javaAssert Statement
349hi def link javaStorageClass StorageClass
350hi def link javaMethodDecl javaStorageClass
351hi def link javaClassDecl javaStorageClass
352hi def link javaScopeDecl javaStorageClass
Aliaksei Budavei9ecf02c2024-02-28 21:30:22 +0100353hi def link javaConceptKind NonText
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200354
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200355hi def link javaBoolean Boolean
356hi def link javaSpecial Special
357hi def link javaSpecialError Error
358hi def link javaSpecialCharError Error
359hi def link javaString String
360hi def link javaCharacter Character
361hi def link javaSpecialChar SpecialChar
362hi def link javaNumber Number
363hi def link javaError Error
364hi def link javaStringError Error
365hi def link javaStatement Statement
366hi def link javaOperator Operator
367hi def link javaComment Comment
368hi def link javaDocComment Comment
369hi def link javaLineComment Comment
370hi def link javaConstant Constant
371hi def link javaTypedef Typedef
372hi def link javaTodo Todo
373hi def link javaAnnotation PreProc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000374
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200375hi def link javaCommentTitle SpecialComment
376hi def link javaDocTags Special
377hi def link javaDocParam Function
378hi def link javaDocSeeTagParam Function
379hi def link javaCommentStar javaComment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000380
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200381hi def link javaType Type
382hi def link javaExternal Include
Bram Moolenaar071d4272004-06-13 20:20:40 +0000383
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200384hi def link htmlComment Special
385hi def link htmlCommentPart Special
386hi def link javaSpaceError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000387
Bram Moolenaar63f32602022-06-09 20:45:54 +0100388if s:isModuleInfoDeclarationCurrentBuffer()
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200389 hi def link javaModuleStorageClass StorageClass
390 hi def link javaModuleStmt Statement
391 hi def link javaModuleExternal Include
392endif
393
Bram Moolenaar071d4272004-06-13 20:20:40 +0000394let b:current_syntax = "java"
395
396if main_syntax == 'java'
397 unlet main_syntax
398endif
399
Bram Moolenaar63f32602022-06-09 20:45:54 +0100400delfunction! s:isModuleInfoDeclarationCurrentBuffer
Bram Moolenaar071d4272004-06-13 20:20:40 +0000401let b:spell_options="contained"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200402let &cpo = s:cpo_save
403unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000404
405" vim: ts=8