blob: c9bb5dc2d4f7d6070ce281cd32435bef4119e647 [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
5" Last Change: 2018 July 26
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 +000026syn match javaOK "\.\.\."
27
28" use separate name so that it can be deleted in javacc.vim
29syn match javaError2 "#\|=<"
Bram Moolenaarf37506f2016-08-31 22:22:10 +020030hi def link javaError2 javaError
Bram Moolenaar071d4272004-06-13 20:20:40 +000031
Bram Moolenaar071d4272004-06-13 20:20:40 +000032" keyword definitions
33syn keyword javaExternal native package
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000034syn match javaExternal "\<import\>\(\s\+static\>\)\?"
Bram Moolenaar071d4272004-06-13 20:20:40 +000035syn keyword javaError goto const
36syn keyword javaConditional if else switch
37syn keyword javaRepeat while for do
38syn keyword javaBoolean true false
39syn keyword javaConstant null
40syn keyword javaTypedef this super
Bram Moolenaar91f84f62018-07-29 15:07:52 +020041syn keyword javaOperator var new instanceof
Bram Moolenaar071d4272004-06-13 20:20:40 +000042syn keyword javaType boolean char byte short int long float double
43syn keyword javaType void
44syn keyword javaStatement return
45syn keyword javaStorageClass static synchronized transient volatile final strictfp serializable
46syn keyword javaExceptions throw try catch finally
47syn keyword javaAssert assert
48syn keyword javaMethodDecl synchronized throws
49syn keyword javaClassDecl extends implements interface
50" to differentiate the keyword class from MyClass.class we use a match here
51syn match javaTypedef "\.\s*\<class\>"ms=s+1
52syn keyword javaClassDecl enum
53syn match javaClassDecl "^class\>"
54syn match javaClassDecl "[^.]\s*\<class\>"ms=s+1
Bram Moolenaar91f84f62018-07-29 15:07:52 +020055syn 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 +020056syn match javaClassDecl "@interface\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000057syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite
58syn match javaUserLabelRef "\k\+" contained
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000059syn match javaVarArg "\.\.\."
Bram Moolenaar071d4272004-06-13 20:20:40 +000060syn keyword javaScopeDecl public protected private abstract
61
Bram Moolenaar91f84f62018-07-29 15:07:52 +020062" Java Modules(Since Java 9, for "module-info.java" file)
63if fnamemodify(bufname("%"), ":t") == "module-info.java"
64 syn keyword javaModuleStorageClass module transitive
65 syn keyword javaModuleStmt open requires exports opens uses provides
66 syn keyword javaModuleExternal to with
67 syn cluster javaTop add=javaModuleStorageClass,javaModuleStmt,javaModuleExternal
68endif
69
Bram Moolenaar8ada17c2006-01-19 22:16:24 +000070if exists("java_highlight_java_lang_ids")
71 let java_highlight_all=1
72endif
Bram Moolenaar91f84f62018-07-29 15:07:52 +020073if exists("java_highlight_all") || exists("java_highlight_java") || exists("java_highlight_java_lang")
Bram Moolenaar071d4272004-06-13 20:20:40 +000074 " java.lang.*
75 syn match javaLangClass "\<System\>"
Bram Moolenaar8ada17c2006-01-19 22:16:24 +000076 syn keyword javaR_JavaLang NegativeArraySizeException ArrayStoreException IllegalStateException RuntimeException IndexOutOfBoundsException UnsupportedOperationException ArrayIndexOutOfBoundsException ArithmeticException ClassCastException EnumConstantNotPresentException StringIndexOutOfBoundsException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException NumberFormatException NullPointerException TypeNotPresentException SecurityException
77 syn cluster javaTop add=javaR_JavaLang
78 syn cluster javaClasses add=javaR_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +020079 hi def link javaR_JavaLang javaR_Java
Bram Moolenaar8ada17c2006-01-19 22:16:24 +000080 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
81 syn cluster javaTop add=javaC_JavaLang
82 syn cluster javaClasses add=javaC_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +020083 hi def link javaC_JavaLang javaC_Java
Bram Moolenaar8ada17c2006-01-19 22:16:24 +000084 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
85 syn cluster javaTop add=javaE_JavaLang
86 syn cluster javaClasses add=javaE_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +020087 hi def link javaE_JavaLang javaE_Java
Bram Moolenaar8ada17c2006-01-19 22:16:24 +000088 syn keyword javaX_JavaLang CloneNotSupportedException Exception NoSuchMethodException IllegalAccessException NoSuchFieldException Throwable InterruptedException ClassNotFoundException InstantiationException
89 syn cluster javaTop add=javaX_JavaLang
90 syn cluster javaClasses add=javaX_JavaLang
Bram Moolenaarf37506f2016-08-31 22:22:10 +020091 hi def link javaX_JavaLang javaX_Java
Bram Moolenaar8ada17c2006-01-19 22:16:24 +000092
Bram Moolenaarf37506f2016-08-31 22:22:10 +020093 hi def link javaR_Java javaR_
94 hi def link javaC_Java javaC_
95 hi def link javaE_Java javaE_
96 hi def link javaX_Java javaX_
97 hi def link javaX_ javaExceptions
98 hi def link javaR_ javaExceptions
99 hi def link javaE_ javaExceptions
100 hi def link javaC_ javaConstant
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000101
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102 syn keyword javaLangObject clone equals finalize getClass hashCode
103 syn keyword javaLangObject notify notifyAll toString wait
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200104 hi def link javaLangObject javaConstant
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000105 syn cluster javaTop add=javaLangObject
Bram Moolenaar071d4272004-06-13 20:20:40 +0000106endif
107
108if filereadable(expand("<sfile>:p:h")."/javaid.vim")
109 source <sfile>:p:h/javaid.vim
110endif
111
112if exists("java_space_errors")
113 if !exists("java_no_trail_space_error")
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200114 syn match javaSpaceError "\s\+$"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000115 endif
116 if !exists("java_no_tab_space_error")
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200117 syn match javaSpaceError " \+\t"me=e-1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000118 endif
119endif
120
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100121syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter,javaString
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200122syn match javaUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
Bram Moolenaar071d4272004-06-13 20:20:40 +0000123syn keyword javaLabel default
124
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100125" highlighting C++ keywords as errors removed, too many people find it
126" annoying. Was: if !exists("java_allow_cpp_keywords")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127
128" The following cluster contains all java groups except the contained ones
Bram Moolenaara5792f52005-11-23 21:25:05 +0000129syn 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000130
131
132" Comments
133syn keyword javaTodo contained TODO FIXME XXX
134if exists("java_comment_strings")
135 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 +0200136 syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000137 syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
138 syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar
139 syn match javaCommentCharacter contained "'[^\\]'"
140 syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
141 syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
142endif
143syn region javaComment start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200144syn match javaCommentStar contained "^\s*\*[^/]"me=e-1
145syn match javaCommentStar contained "^\s*\*$"
146syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200147hi def link javaCommentString javaString
148hi def link javaComment2String javaString
149hi def link javaCommentCharacter javaCharacter
Bram Moolenaar071d4272004-06-13 20:20:40 +0000150
151syn cluster javaTop add=javaComment,javaLineComment
152
153if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
154 syntax case ignore
155 " syntax coloring for javadoc comments (HTML)
156 syntax include @javaHtml <sfile>:p:h/html.vim
157 unlet b:current_syntax
Bram Moolenaar5c736222010-01-06 20:54:52 +0100158 " HTML enables spell checking for all text that is not in a syntax item. This
159 " is wrong for Java (all identifiers would be spell-checked), so it's undone
160 " here.
161 syntax spell default
162
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200163 syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
164 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 +0000165
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200166 syn region javaDocTags contained start="{@\(code\|link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200167 syn match javaDocTags contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
168 syn match javaDocParam contained "\s\S\+"
169 syn match javaDocTags contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
170 syn region javaDocSeeTag contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
Bram Moolenaar8ada17c2006-01-19 22:16:24 +0000171 syn match javaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000172 syntax case match
173endif
174
175" match the special comment /**/
176syn match javaComment "/\*\*/"
177
178" Strings and constants
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200179syn match javaSpecialError contained "\\."
Bram Moolenaar071d4272004-06-13 20:20:40 +0000180syn match javaSpecialCharError contained "[^']"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200181syn match javaSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000182syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
183" next line disabled, it can cause a crash for a long line
184"syn match javaStringError +"\([^"\\]\|\\.\)*$+
185syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
186syn match javaCharacter "'\\''" contains=javaSpecialChar
187syn match javaCharacter "'[^\\]'"
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100188syn match javaNumber "\<\(0[bB][0-1]\+\|0[0-7]*\|0[xX]\x\+\|\d\(\d\|_\d\)*\)[lL]\=\>"
189syn match javaNumber "\(\<\d\(\d\|_\d\)*\.\(\d\(\d\|_\d\)*\)\=\|\.\d\(\d\|_\d\)*\)\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\="
190syn match javaNumber "\<\d\(\d\|_\d\)*[eE][-+]\=\d\(\d\|_\d\)*[fFdD]\=\>"
191syn match javaNumber "\<\d\(\d\|_\d\)*\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000192
193" unicode characters
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200194syn match javaSpecial "\\u\d\{4\}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000195
196syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
197
198if exists("java_highlight_functions")
199 if java_highlight_functions == "indent"
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100200 syn match javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
201 syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
202 syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation
203 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 +0000204 else
205 " This line catches method declarations at any indentation>0, but it assumes
206 " two things:
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200207 " 1. class names are always capitalized (ie: Button)
208 " 2. method names are never capitalized (except constructors, of course)
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100209 "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
210 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000211 endif
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100212 syn match javaLambdaDef "[a-zA-Z_][a-zA-Z0-9_]*\s*->"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000213 syn match javaBraces "[{}]"
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100214 syn cluster javaTop add=javaFuncDef,javaBraces,javaLambdaDef
Bram Moolenaar071d4272004-06-13 20:20:40 +0000215endif
216
217if exists("java_highlight_debug")
218
219 " Strings and constants
220 syn match javaDebugSpecial contained "\\\d\d\d\|\\."
221 syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200222 syn match javaDebugStringError +"\([^"\\]\|\\.\)*$+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000223 syn match javaDebugCharacter contained "'[^\\]'"
224 syn match javaDebugSpecialCharacter contained "'\\.'"
225 syn match javaDebugSpecialCharacter contained "'\\''"
226 syn match javaDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
227 syn match javaDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
228 syn match javaDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
229 syn match javaDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
230 syn keyword javaDebugBoolean contained true false
231 syn keyword javaDebugType contained null this super
232 syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
233
234 " to make this work you must define the highlighting for these groups
235 syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000236 syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
Bram Moolenaar071d4272004-06-13 20:20:40 +0000237 syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
238 syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
239
240 syn cluster javaTop add=javaDebug
241
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200242 hi def link javaDebug Debug
243 hi def link javaDebugString DebugString
244 hi def link javaDebugStringError javaError
245 hi def link javaDebugType DebugType
246 hi def link javaDebugBoolean DebugBoolean
247 hi def link javaDebugNumber Debug
248 hi def link javaDebugSpecial DebugSpecial
249 hi def link javaDebugSpecialCharacter DebugSpecial
250 hi def link javaDebugCharacter DebugString
251 hi def link javaDebugParen Debug
Bram Moolenaar071d4272004-06-13 20:20:40 +0000252
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200253 hi def link DebugString String
254 hi def link DebugSpecial Special
255 hi def link DebugBoolean Boolean
256 hi def link DebugType Type
Bram Moolenaar071d4272004-06-13 20:20:40 +0000257endif
258
259if exists("java_mark_braces_in_parens_as_errors")
260 syn match javaInParen contained "[{}]"
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200261 hi def link javaInParen javaError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000262 syn cluster javaTop add=javaInParen
263endif
264
265" catch errors caused by wrong parenthesis
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100266syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000267syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
268syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200269syn match javaParenError ")"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000270" catch errors caused by wrong square parenthesis
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100271syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000272syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
273syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200274syn match javaParenError "\]"
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000275
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200276hi def link javaParenError javaError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000277
Bram Moolenaarf3c2afb2015-03-02 23:16:07 +0100278if exists("java_highlight_functions")
279 syn match javaLambdaDef "([a-zA-Z0-9_<>\[\], \t]*)\s*->"
280 " needs to be defined after the parenthesis error catcher to work
281endif
282
Bram Moolenaar071d4272004-06-13 20:20:40 +0000283if !exists("java_minlines")
284 let java_minlines = 10
285endif
286exec "syn sync ccomment javaComment minlines=" . java_minlines
287
288" The default highlighting.
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200289hi def link javaLambdaDef Function
290hi def link javaFuncDef Function
291hi def link javaVarArg Function
292hi def link javaBraces Function
293hi def link javaBranch Conditional
294hi def link javaUserLabelRef javaUserLabel
295hi def link javaLabel Label
296hi def link javaUserLabel Label
297hi def link javaConditional Conditional
298hi def link javaRepeat Repeat
299hi def link javaExceptions Exception
300hi def link javaAssert Statement
301hi def link javaStorageClass StorageClass
302hi def link javaMethodDecl javaStorageClass
303hi def link javaClassDecl javaStorageClass
304hi def link javaScopeDecl javaStorageClass
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200305
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200306hi def link javaBoolean Boolean
307hi def link javaSpecial Special
308hi def link javaSpecialError Error
309hi def link javaSpecialCharError Error
310hi def link javaString String
311hi def link javaCharacter Character
312hi def link javaSpecialChar SpecialChar
313hi def link javaNumber Number
314hi def link javaError Error
315hi def link javaStringError Error
316hi def link javaStatement Statement
317hi def link javaOperator Operator
318hi def link javaComment Comment
319hi def link javaDocComment Comment
320hi def link javaLineComment Comment
321hi def link javaConstant Constant
322hi def link javaTypedef Typedef
323hi def link javaTodo Todo
324hi def link javaAnnotation PreProc
Bram Moolenaar071d4272004-06-13 20:20:40 +0000325
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200326hi def link javaCommentTitle SpecialComment
327hi def link javaDocTags Special
328hi def link javaDocParam Function
329hi def link javaDocSeeTagParam Function
330hi def link javaCommentStar javaComment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000331
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200332hi def link javaType Type
333hi def link javaExternal Include
Bram Moolenaar071d4272004-06-13 20:20:40 +0000334
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200335hi def link htmlComment Special
336hi def link htmlCommentPart Special
337hi def link javaSpaceError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000338
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200339if fnamemodify(bufname("%"), ":t") == "module-info.java"
340 hi def link javaModuleStorageClass StorageClass
341 hi def link javaModuleStmt Statement
342 hi def link javaModuleExternal Include
343endif
344
Bram Moolenaar071d4272004-06-13 20:20:40 +0000345let b:current_syntax = "java"
346
347if main_syntax == 'java'
348 unlet main_syntax
349endif
350
351let b:spell_options="contained"
Bram Moolenaar0c5fa7d2012-10-05 22:26:30 +0200352let &cpo = s:cpo_save
353unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000354
355" vim: ts=8