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