runtime(java): Compose "g:java_highlight_signature" and "g:java_highlight_functions"
With the variables defined, distinctly highlight parts of
a method declaration header: its name and parameter list
parens, from its type parameters, return type, and formal
parameters; and distinctly highlight parts of a lambda
expression: its parameter list parens and the arrow, from
its formal parameters and identifiers.
closes: #15083
Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/syntax/java.vim b/runtime/syntax/java.vim
index b612cca..4beeaad 100644
--- a/runtime/syntax/java.vim
+++ b/runtime/syntax/java.vim
@@ -3,7 +3,7 @@
" Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com>
" Former Maintainer: Claudio Fleiner <claudio@fleiner.com>
" Repository: https://github.com/zzzyxwvut/java-vim.git
-" Last Change: 2024 Jun 19
+" Last Change: 2024 Jun 22
" Please check :help java.vim for comments on some of the options available.
@@ -139,6 +139,12 @@
let [s:ff.Engine, s:ff.UpperCase, s:ff.LowerCase] = repeat([s:ff.RightConstant], 3)
endif
+if exists("java_highlight_signature")
+ let [s:ff.PeekTo, s:ff.PeekFrom, s:ff.GroupArgs] = repeat([s:ff.LeftConstant], 3)
+else
+ let [s:ff.PeekTo, s:ff.PeekFrom, s:ff.GroupArgs] = repeat([s:ff.RightConstant], 3)
+endif
+
" Java modules (since Java 9, for "module-info.java" file).
if s:module_info_cur_buf
syn keyword javaModuleStorageClass module transitive
@@ -228,9 +234,17 @@
hi def link javaE_ javaExceptions
hi def link javaC_ javaConstant
- syn keyword javaLangObject clone equals finalize getClass hashCode
- syn keyword javaLangObject notify notifyAll toString wait
- hi def link javaLangObject javaConstant
+ syn keyword javaLangObject getClass notify notifyAll wait
+
+ " Lower the syntax priority of overridable java.lang.Object method
+ " names for zero-width matching (define g:java_highlight_signature
+ " and see their base declarations for java.lang.Object):
+ syn match javaLangObject "\<clone\>"
+ syn match javaLangObject "\<equals\>"
+ syn match javaLangObject "\<finalize\>"
+ syn match javaLangObject "\<hashCode\>"
+ syn match javaLangObject "\<toString\>"
+ hi def link javaLangObject javaConstant
endif
if filereadable(expand("<sfile>:p:h") . "/javaid.vim")
@@ -364,30 +378,49 @@
if exists("java_highlight_functions")
syn cluster javaFuncParams contains=javaAnnotation,@javaClasses,javaGenerics,javaType,javaVarArg,javaComment,javaLineComment
+ if exists("java_highlight_signature")
+ syn keyword javaParamModifier contained final
+ syn cluster javaFuncParams add=javaParamModifier
+ hi def link javaParamModifier javaConceptKind
+ hi def link javaFuncDefStart javaFuncDef
+ else
+ syn cluster javaFuncParams add=javaScopeDecl,javaConceptKind,javaStorageClass,javaExternal
+ endif
+
if java_highlight_functions =~# '^indent[1-8]\=$'
let s:last = java_highlight_functions[-1 :]
let s:indent = s:last != 't' ? repeat("\x20", s:last) : "\t"
- syn cluster javaFuncParams add=javaScopeDecl,javaConceptKind,javaStorageClass,javaExternal
" Try to not match other type members, initialiser blocks, enum
" constants (JLS-17, §8.9.1), and constructors (JLS-17, §8.1.7):
" at any _conventional_ indentation, skip over all fields with
" "[^=]*", all records with "\<record\s", and let the "*Skip*"
" definitions take care of constructor declarations and enum
- " constants (with no support for @Foo(value = "bar")).
- exec 'syn region javaFuncDef start=+^' . s:indent . '\%(<[^>]\+>\+\s\+\|\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)\+\)\=\%(\<\K\k*\>\.\)*\K\k*\>[^=]*\%(\<record\)\@' . s:ff.Peek('6', '') . '<!\s\K\k*\s*(+ end=+)+ contains=@javaFuncParams'
+ " constants (with no support for @Foo(value = "bar")). Also,
+ " reject inlined declarations with "[^{]" for signature.
+ exec 'syn region javaFuncDef ' . s:ff.GroupArgs('transparent matchgroup=javaFuncDefStart', '') . ' start=/' . s:ff.PeekTo('\%(', '') . '^' . s:indent . '\%(<[^>]\+>\+\s\+\|\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)\+\)\=\%(\<\K\k*\>\.\)*\K\k*\>[^={]*\%(\<record\)\@' . s:ff.Peek('6', '') . '<!\s' . s:ff.PeekFrom('\)\@' . s:ff.Peek('80', '') . '<=', '') . '\K\k*\s*(/ end=/)/ contains=@javaFuncParams'
" As long as package-private constructors cannot be matched with
" javaFuncDef, do not look with javaConstructorSkipDeclarator for
" them.
- exec 'syn match javaConstructorSkipDeclarator transparent +^' . s:indent . '\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*p\%(ublic\|rotected\|rivate\)\s\+\%(<[^>]\+>\+\s\+\)\=\K\k*\s*\ze(+ contains=javaAnnotation,javaScopeDecl'
- exec 'syn match javaEnumSkipArgumentativeConstant transparent +^' . s:indent . '\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\K\k*\s*\ze(+ contains=javaAnnotation'
+ exec 'syn match javaConstructorSkipDeclarator transparent /^' . s:indent . '\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*p\%(ublic\|rotected\|rivate\)\s\+\%(<[^>]\+>\+\s\+\)\=\K\k*\s*\ze(/ contains=javaAnnotation,javaScopeDecl,javaClassDecl,javaTypedef,javaGenerics'
+ " With a zero-width span for signature applicable on demand to
+ " javaFuncDef, make related adjustments:
+ " (1) Claim all enum constants of a line as a unit.
+ exec 'syn match javaEnumSkipConstant contained transparent /^' . s:indent . '\%(\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\K\k*\s*\%((.*)\)\=\s*[,;({]\s*\)\+/ contains=@javaEnumConstants'
+ " (2) Define a syntax group for top level enumerations and tell
+ " apart their constants from method declarations.
+ exec 'syn region javaTopEnumDeclaration transparent start=/\%(^\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(strictfp\s\+\)\=\<enum\_s\+\)\@' . s:ff.Peek('80', '') . '<=\K\k*\%(\_s\+implements\_s.\+\)\=\_s*{/ end=/}/ contains=@javaTop,javaEnumSkipConstant'
+ " (3) Define a base variant of javaParenT without using @javaTop
+ " in order to not include javaFuncDef.
+ syn region javaParenE transparent matchgroup=javaParen start="(" end=")" contains=@javaEnumConstants,javaInParen
+ syn region javaParenE transparent matchgroup=javaParen start="\[" end="\]" contains=@javaEnumConstants
+ syn cluster javaEnumConstants contains=TOP,javaTopEnumDeclaration,javaFuncDef,javaParenT
unlet s:indent s:last
else
" This is the "style" variant (:help ft-java-syntax).
- syn cluster javaFuncParams add=javaScopeDecl,javaConceptKind,javaStorageClass,javaExternal
" Match arbitrarily indented camelCasedName method declarations.
" Match: [@ɐ] [abstract] [<α, β>] Τʬ[<γ>][[][]] μʭʭ(/* ... */);
- exec 'syn region javaFuncDef start=/' . s:ff.Engine('\%#=2', '') . '^\s\+\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(\%(abstract\|default\)\s\+\|\%(\%(final\|\%(native\|strictfp\)\|s\%(tatic\|ynchronized\)\)\s\+\)*\)\=\%(<.*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\s\+\)\=\%(void\|\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\|\%(\<\K\k*\>\.\)*\<' . s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\>\%(<[^(){}]*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\)\=\)\%(\[\]\)*\)\s\+\<' . s:ff.LowerCase('[$_[:lower:]]', '[^A-Z0-9]') . '\k*\>\s*(/ end=/)/ skip=/\/\*.\{-}\*\/\|\/\/.*$/ contains=@javaFuncParams'
+ exec 'syn region javaFuncDef ' . s:ff.GroupArgs('transparent matchgroup=javaFuncDefStart', '') . ' start=/' . s:ff.Engine('\%#=2', '') . s:ff.PeekTo('\%(', '') . '^\s\+\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(\%(abstract\|default\)\s\+\|\%(\%(final\|\%(native\|strictfp\)\|s\%(tatic\|ynchronized\)\)\s\+\)*\)\=\%(<.*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\s\+\)\=\%(void\|\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\|\%(\<\K\k*\>\.\)*\<' . s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\>\%(<[^(){}]*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\)\=\)\%(\[\]\)*\)\s\+' . s:ff.PeekFrom('\)\@' . s:ff.Peek('80', '') . '<=', '') . '\<' . s:ff.LowerCase('[$_[:lower:]]', '[^A-Z0-9]') . '\k*\>\s*(/ end=/)/ skip=/\/\*.\{-}\*\/\|\/\/.*$/ contains=@javaFuncParams'
endif
endif
@@ -466,19 +499,29 @@
" Lambda expressions (JLS-17, §15.27).
if exists("java_highlight_functions")
+ if exists("java_highlight_signature")
+ let s:ff.LambdaDef = s:ff.LeftConstant
+ else
+ let s:ff.LambdaDef = s:ff.RightConstant
+ endif
+
" Make ()-matching definitions after the parenthesis error catcher.
"
+ " Note that here and elsewhere a single-line token is used for \z,
+ " with other tokens repeated as necessary, to overcome the lack of
+ " support for multi-line matching with \z.
+ "
" Match: ([@A [@B ...] final] var a[, var b, ...]) ->
" | ([@A [@B ...] final] T[<α>][[][]] a[, T b, ...]) ->
" There is no recognition of expressions interspersed with comments
" or of expressions whose parameterised parameter types are written
" across multiple lines.
- exec 'syn match javaLambdaDef "\k\@' . s:ff.Peek('4', '') . '<!([[:space:]\n]*\%(\%(@\%(\K\k*\.\)*\K\k*\>\%((\_.\{-1,})\)\{-,1}[[:space:]\n]\+\)*\%(final[[:space:]\n]\+\)\=\%(\<\K\k*\>\.\)*\<\K\k*\>\%(<[^(){}]*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\)\=\%(\%(\%(\[\]\)\+\|\.\.\.\)\)\=[[:space:]\n]\+\<\K\k*\>\%(\[\]\)*\%(,[[:space:]\n]*\)\=\)\+)[[:space:]\n]*->" contains=javaAnnotation,javaParamModifier,javaLambdaVarType,javaType,@javaClasses,javaGenerics,javaVarArg'
+ exec 'syn ' . s:ff.LambdaDef('region javaLambdaDef transparent matchgroup=javaLambdaDefStart start=/', 'match javaLambdaDef "') . '\k\@' . s:ff.Peek('4', '') . '<!(' . s:ff.LambdaDef('\%(', '') . '[[:space:]\n]*\%(\%(@\%(\K\k*\.\)*\K\k*\>\%((\_.\{-1,})\)\{-,1}[[:space:]\n]\+\)*\%(final[[:space:]\n]\+\)\=\%(\<\K\k*\>\.\)*\<\K\k*\>\%(<[^(){}]*[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\)\=\%(\%(\%(\[\]\)\+\|\.\.\.\)\)\=[[:space:]\n]\+\<\K\k*\>\%(\[\]\)*\%(,[[:space:]\n]*\)\=\)\+)[[:space:]\n]*' . s:ff.LambdaDef('\z(->\)\)\@=/ end=/)[[:space:]\n]*\z1/', '->"') . ' contains=javaAnnotation,javaParamModifier,javaLambdaVarType,javaType,@javaClasses,javaGenerics,javaVarArg'
" Match: () ->
" | (a[, b, ...]) ->
- exec 'syn match javaLambdaDef "\k\@' . s:ff.Peek('4', '') . '<!([[:space:]\n]*\%(\<\K\k*\>\%(,[[:space:]\n]*\)\=\)*)[[:space:]\n]*->"'
+ exec 'syn ' . s:ff.LambdaDef('region javaLambdaDef transparent matchgroup=javaLambdaDefStart start=/', 'match javaLambdaDef "') . '\k\@' . s:ff.Peek('4', '') . '<!(' . s:ff.LambdaDef('\%(', '') . '[[:space:]\n]*\%(\<\K\k*\>\%(,[[:space:]\n]*\)\=\)*)[[:space:]\n]*' . s:ff.LambdaDef('\z(->\)\)\@=/ end=/)[[:space:]\n]*\z1/', '->"')
" Match: a ->
- exec 'syn match javaLambdaDef "\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<![[:space:]\n]*->"'
+ exec 'syn ' . s:ff.LambdaDef('region javaLambdaDef transparent start=/', 'match javaLambdaDef "') . '\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<!' . s:ff.LambdaDef('\%([[:space:]\n]*\z(->\)\)\@=/ matchgroup=javaLambdaDefStart end=/\z1/', '[[:space:]\n]*->"')
syn keyword javaParamModifier contained final
hi def link javaParamModifier javaConceptKind
@@ -488,7 +531,7 @@
" The @javaTop cluster comprises non-contained Java syntax groups.
" Note that the syntax file "aidl.vim" relies on its availability.
-syn cluster javaTop contains=TOP
+syn cluster javaTop contains=TOP,javaTopEnumDeclaration
if !exists("java_minlines")
let java_minlines = 10
@@ -504,7 +547,8 @@
" The default highlighting.
hi def link javaLambdaDef Function
-hi def link javaFuncDef Function
+hi def link javaLambdaDefStart Function
+hi def link javaFuncDef Function
hi def link javaVarArg Function
hi def link javaBranch Conditional
hi def link javaUserLabelRef javaUserLabel
diff --git a/runtime/syntax/testdir/dumps/java_annotations_signature_00.dump b/runtime/syntax/testdir/dumps/java_annotations_signature_00.dump
new file mode 100644
index 0000000..9cb2182
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_annotations_signature_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|s|t|y|l|e|'| +0#0000000&@16
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|s|i|g|n|a|t|u|r|e| |=| |1| +0#0000000&@22
+@75
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|;| @34
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|;| @39
+@75
+|c+0#00e0003&|l|a|s@1| +0#0000000&|A|n@1|o|t|a|t|i|o|n|s|$|T|e|s|t|s| @51
+|{| @73
+@4|@+0#e000e06&|T|a|r|g|e|t|(|E+0#0000000&|l|e|m|e|n|t|T|y|p|e|.|T|Y|P|E|_|U|S|E|)+0#e000e06&| +0#0000000&@41
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|a|g| @56
+@4|{| @69
+@8|S|t|r|i|n|g| |v+0#00e0e07&|a|l|u|e|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @40
+@8|S|t|r|i|n|g| |k+0#00e0e07&|i|n|d|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @41
+@4|}| @69
+@75
+@4|@+0#e000e06&|T|a|r|g|e|t|(|E+0#0000000&|l|e|m|e|n|t|T|y|p|e|.|T|Y|P|E|_|U|S|E|)+0#e000e06&| +0#0000000&@41
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|e|x|t| @55
+@4|{| @69
+@8|S|t|r|i|n|g|[|]| |v+0#00e0e07&|a|l|u|e|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|{|"+0#e000002&@1|}+0#0000000&|;| @36
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_annotations_signature_01.dump b/runtime/syntax/testdir/dumps/java_annotations_signature_01.dump
new file mode 100644
index 0000000..32d606a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_annotations_signature_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|}| @69
+@75
+@4|@+0#e000e06&|T|a|r|g|e|t|(|E+0#0000000&|l|e|m|e|n|t|T|y|p|e|.|T|Y|P|E|_|U|S|E|)+0#e000e06&| +0#0000000&@41
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|e|x|t| @55
+@4|{| @69
+@8>S|t|r|i|n|g|[|]| |v+0#00e0e07&|a|l|u|e|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|{|"+0#e000002&@1|}+0#0000000&|;| @36
+@4|}| @69
+@75
+@4|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&| @61
+@8|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| @47
+@8|E|l|e|m|e|n|t|T|y|p|e|.|P|A|R|A|M|E|T|E|R|,| @44
+@8|E|l|e|m|e|n|t|T|y|p|e|.|T|Y|P|E|,| @49
+@4|}|)+0#e000e06&| +0#0000000&@68
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|L|a|b|e|l|s| @53
+@4|{| @69
+@8|L|a|b|e|l|[|]| |v+0#00e0e07&|a|l|u|e|(|)|;+0#0000000&| @50
+@4|}| @69
+@75
+@4|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|(|{+0#0000000&| @40
+@57|1|9|,|3|-|9| @7|2@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_annotations_signature_02.dump b/runtime/syntax/testdir/dumps/java_annotations_signature_02.dump
new file mode 100644
index 0000000..67c0975
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_annotations_signature_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|(|{+0#0000000&| @40
+@8|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| @26
+@8|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|.|P|A|R|A|M|E|T|E|R|,| @23
+@8|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|.|T|Y|P|E|,| @28
+@4|}|)+0#e000e06&| +0#0000000&@68
+@4>@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|R|e|p|e|a|t|a|b|l|e|(|L+0#0000000&|a|b|e|l|s|.|c+0#00e0003&|l|a|s@1|)+0#e000e06&| +0#0000000&@24
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|L|a|b|e|l| @54
+@4|{| @69
+@8|S|t|r|i|n|g| |v+0#00e0e07&|a|l|u|e|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @40
+@8|C|l|a|s@1|<|?|>| |t+0#00e0e07&|y|p|e|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|L|a|b|e|l|.|c+0#00e0003&|l|a|s@1|;+0#0000000&| @30
+@8|b+0#00e0003&|o@1|l|e|a|n| +0#0000000&|r+0#00e0e07&|e|d|u|n|d|a|n|t|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|t+0#e000002&|r|u|e|;+0#0000000&| @33
+@8|T|e|x|t| |t+0#00e0e07&|e|x|t|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|@+0#e000e06&|T|e|x|t|;+0#0000000&| @40
+@8|T|a|g| |h+0#00e0e07&|e|a|d|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|@+0#e000e06&|T|a|g|(|)|;+0#0000000&| @40
+@8|T|a|g| |t+0#00e0e07&|a|i|l|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|@+0#e000e06&|T|a|g|(|v+0#0000000&|a|l|u|e| |=| |"+0#e000002&@1|,+0#0000000&| |k|i|n|d| |=| |"+0#e000002&@1|)+0#e000e06&|;+0#0000000&| @19
+@4|}| @69
+@75
+@4|/+0#0000e05&|*| |U|s|e| |i|d|e|n|t|i|t|y| |c|a|s|t| |e|x|p|r|e|s@1|i|o|n|s| |t|o| |n|e|s|t| |T|Y|P|E|_|U|S|E| |a|n@1|o|t|a|t|i|o|n|s|.| |*|/| +0#0000000&@5
+@32|@+0#e000e06&|L|a|b|e|l|(| +0#0000000&@35
+@28|(|@+0#e000e06&|T|e|x|t|(|{+0#0000000&| @38
+@57|3|7|,|2|-|5| @7|5|2|%|
diff --git a/runtime/syntax/testdir/dumps/java_annotations_signature_03.dump b/runtime/syntax/testdir/dumps/java_annotations_signature_03.dump
new file mode 100644
index 0000000..fcc187f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_annotations_signature_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@27|(|@+0#e000e06&|T|e|x|t|(|{+0#0000000&| @38
+@8|(|@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|a|"|,+0#0000000&| |"+0#e000002&|a@1|"|,+0#0000000&| |"+0#e000002&|a@2|"|,+0#0000000&| |"+0#e000002&|a@3|"|,+0#0000000&| |}|)+0#e000e06&| +0#0000000&|S|t|r|i|n|g|)| |"+0#e000002&|a|s|"|,+0#0000000&| @15
+@8|(|@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|b|"|,+0#0000000&| |"+0#e000002&|b@1|"|,+0#0000000&| |"+0#e000002&|b@2|"|,+0#0000000&| |"+0#e000002&|b@3|"|,+0#0000000&| |}|)+0#e000e06&| +0#0000000&|S|t|r|i|n|g|)| |"+0#e000002&|b|s|"|,+0#0000000&| @15
+@8|(|@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|c|"|,+0#0000000&| |"+0#e000002&|c@1|"|,+0#0000000&| |"+0#e000002&|c@2|"|,+0#0000000&| |"+0#e000002&|c@3|"|,+0#0000000&| |}|)+0#e000e06&| +0#0000000&|S|t|r|i|n|g|)| |"+0#e000002&|c|s|"|,+0#0000000&| @15
+@8|(|@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|d|"|,+0#0000000&| |"+0#e000002&|d@1|"|,+0#0000000&| |"+0#e000002&|d@2|"|,+0#0000000&| |"+0#e000002&|d@3|"|,+0#0000000&| |}|)+0#e000e06&| +0#0000000&|S|t|r|i|n|g|)| |"+0#e000002&|d|s|"|,+0#0000000&| @15
+@28>}|)+0#e000e06&| +0#0000000&|S|t|r|i|n|g|)| |"+0#e000002&|a|b|c|d|"|)+0#e000e06&| +0#0000000&@28
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|P|r|i|m|e|r| |{| |}| @50
+@75
+@4|@+0#e000e06&|L|a|b|e|l| +0#0000000&|@+0#e000e06&|L|a|b|e|l|(|)| +0#0000000&|@+0#e000e06&|L|a|b|e|l|(|"+0#0000000&@2| @44
+| +0#e000002&@3|n|\| +0#0000000&@68
+| +0#e000002&@3|o|\| +0#0000000&@68
+| +0#e000002&@3|O|\| +0#0000000&@68
+| +0#e000002&@3|p|"+0#0000000&@2|)+0#e000e06&| +0#0000000&@65
+@4|@+0#e000e06&|L|a|b|e|l|(|h+0#0000000&|e|a|d| |=| |@+0#e000e06&|T|a|g|(|v+0#0000000&|a|l|u|e| |=| |"+0#e000002&|@|L|a|b|e|l|"|/+0#0000e05&|*|,| |k|i|n|d| |=| |"|n|a|m|e|"|*|/|)+0#e000e06&@1| +0#0000000&@14
+@4|@+0#e000e06&|L|a|b|e|l|(|/+0#0000e05&@1| |v|a|l|u|e| |=| |"|M|e|t|h|o|d|"|,| +0#0000000&@43
+@8|t|y|p|e| |=| |A|n@1|o|t|a|t|i|o|n|s|$|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|,+0#0000000&| @35
+@8|r|e|d|u|n|d|a|n|t| |=| |!@2|(|1+0#e000002&| +0#0000000&|!|=| |1+0#e000002&|)+0#0000000&|,| @42
+@8|h|e|a|d| |=| |@+0#e000e06&|T|a|g|(|v+0#0000000&|a|l|u|e| |=| |"+0#e000002&|@|L|a|b|e|l|"|)+0#e000e06&|,+0#0000000&| @36
+@8|t|e|x|t| |=| |@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|}|)|"|,+0#0000000&| |"+0#e000002&|(|{|"| +0#0000000&|}|)+0#e000e06&@1| +0#0000000&@37
+@57|5@1|,|8|-|2|9| @6|8|3|%|
diff --git a/runtime/syntax/testdir/dumps/java_annotations_signature_04.dump b/runtime/syntax/testdir/dumps/java_annotations_signature_04.dump
new file mode 100644
index 0000000..635080c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_annotations_signature_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|t|e|x|t| |=| |@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|}|)|"|,+0#0000000&| |"+0#e000002&|(|{|"| +0#0000000&|}|)+0#e000e06&@1| +0#0000000&@37
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|n+0#00e0e07&|o|O|p|(|@+0#e000e06&|L|a|b|e|l| +0#0000000&|@+0#e000e06&|L|a|b|e|l|(|)| +0#0000000&|@+0#e000e06&|L|a|b|e|l|(|"+0#e000002&|d|u|m@1|y|"|)+0#e000e06&| +0#0000000&@22
+@8|@+0#e000e06&|L|a|b|e|l|(|h+0#0000000&|e|a|d| |=| |@+0#e000e06&|T|a|g|(|/+0#0000e05&|*|v|a|l|u|e| |=| |"|@|L|a|b|e|l|"|,|*|/| +0#0000000&|k|i|n|d| |=| |"+0#e000002&|n|a|m|e|"|)+0#e000e06&@1| +0#0000000&@10
+@8|@+0#e000e06&|L|a|b|e|l|(|/+0#0000e05&@1| |v|a|l|u|e| |=| |"|P|a|r|a|m|e|t|e|r|"|,| +0#0000000&@36
+@12|t|y|p|e| |=| |A|n@1|o|t|a|t|i|o|n|s|$|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|,+0#0000000&| @31
+@12>h|e|a|d| |=| |@+0#e000e06&|T|a|g|(|v+0#0000000&|a|l|u|e| |=| |"+0#e000002&|@|L|a|b|e|l|"|)+0#e000e06&|,+0#0000000&| @32
+@12|t|e|x|t| |=| |@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|)|{|"|,+0#0000000&| |"+0#e000002&|}|(|"| +0#0000000&|}|)+0#e000e06&@1| +0#0000000&@33
+@8|O|b|j|e|c|t| |d|u|m@1|y|)+0#00e0e07&| +0#0000000&@53
+@4|{| @69
+@4|}| @69
+|}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|7|3|,|4|-|1|3| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_annotations_signature_99.dump b/runtime/syntax/testdir/dumps/java_annotations_signature_99.dump
new file mode 100644
index 0000000..badab30
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_annotations_signature_99.dump
@@ -0,0 +1,20 @@
+| +0#e000002#ffffff0@3|o|\| +0#0000000&@68
+| +0#e000002&@3|O|\| +0#0000000&@68
+| +0#e000002&@3|p|"+0#0000000&@2|)+0#e000e06&| +0#0000000&@65
+@4|@+0#e000e06&|L|a|b|e|l|(|h+0#0000000&|e|a|d| |=| |@+0#e000e06&|T|a|g|(|v+0#0000000&|a|l|u|e| |=| |"+0#e000002&|@|L|a|b|e|l|"|/+0#0000e05&|*|,| |k|i|n|d| |=| |"|n|a|m|e|"|*|/|)+0#e000e06&@1| +0#0000000&@14
+@4|@+0#e000e06&|L|a|b|e|l|(|/+0#0000e05&@1| |v|a|l|u|e| |=| |"|M|e|t|h|o|d|"|,| +0#0000000&@43
+@8|t|y|p|e| |=| |A|n@1|o|t|a|t|i|o|n|s|$|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|,+0#0000000&| @35
+@8|r|e|d|u|n|d|a|n|t| |=| |!@2|(|1+0#e000002&| +0#0000000&|!|=| |1+0#e000002&|)+0#0000000&|,| @42
+@8|h|e|a|d| |=| |@+0#e000e06&|T|a|g|(|v+0#0000000&|a|l|u|e| |=| |"+0#e000002&|@|L|a|b|e|l|"|)+0#e000e06&|,+0#0000000&| @36
+@8|t|e|x|t| |=| |@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|}|)|"|,+0#0000000&| |"+0#e000002&|(|{|"| +0#0000000&|}|)+0#e000e06&@1| +0#0000000&@37
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|n+0#00e0e07&|o|O|p|(|@+0#e000e06&|L|a|b|e|l| +0#0000000&|@+0#e000e06&|L|a|b|e|l|(|)| +0#0000000&|@+0#e000e06&|L|a|b|e|l|(|"+0#e000002&|d|u|m@1|y|"|)+0#e000e06&| +0#0000000&@22
+@8|@+0#e000e06&|L|a|b|e|l|(|h+0#0000000&|e|a|d| |=| |@+0#e000e06&|T|a|g|(|/+0#0000e05&|*|v|a|l|u|e| |=| |"|@|L|a|b|e|l|"|,|*|/| +0#0000000&|k|i|n|d| |=| |"+0#e000002&|n|a|m|e|"|)+0#e000e06&@1| +0#0000000&@10
+@8|@+0#e000e06&|L|a|b|e|l|(|/+0#0000e05&@1| |v|a|l|u|e| |=| |"|P|a|r|a|m|e|t|e|r|"|,| +0#0000000&@36
+@12|t|y|p|e| |=| |A|n@1|o|t|a|t|i|o|n|s|$|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|,+0#0000000&| @31
+@12|h|e|a|d| |=| |@+0#e000e06&|T|a|g|(|v+0#0000000&|a|l|u|e| |=| |"+0#e000002&|@|L|a|b|e|l|"|)+0#e000e06&|,+0#0000000&| @32
+@12|t|e|x|t| |=| |@+0#e000e06&|T|e|x|t|(|{+0#0000000&| |"+0#e000002&|)|{|"|,+0#0000000&| |"+0#e000002&|}|(|"| +0#0000000&|}|)+0#e000e06&@1| +0#0000000&@33
+@8|O|b|j|e|c|t| |d|u|m@1|y|)+0#00e0e07&| +0#0000000&@53
+@4|{| @69
+@4|}| @69
+>}| @73
+@57|7|8|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_00.dump b/runtime/syntax/testdir/dumps/java_generics_signature_00.dump
new file mode 100644
index 0000000..0b09f31
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|s|t|y|l|e|'| +0#0000000&@16
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|s|i|g|n|a|t|u|r|e| |=| |1| +0#0000000&@22
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|g|e|n|e|r|i|c|s| |=| |1| +0#0000000&@23
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |j|a|v|a|G|e|n|e|r|i|c|s|C|1| |T|o|d|o| +0#0000000&@29
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |j|a|v|a|G|e|n|e|r|i|c|s|C|2| |E|r@1|o|r| +0#0000000&@28
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|m|a|t|h|.|B|i|g|I|n|t|e|g|e|r|;| @46
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|C|o|n|s|u|m|e|r|;| @39
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|;| @39
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|L|o|n|g|F|u|n|c|t|i|o|n|;| @35
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|P|r|e|d|i|c|a|t|e|;| @38
+@75
+|c+0#00e0003&|l|a|s@1| +0#0000000&|G+0#0000001#ffff4012|e|n|e|r|i|c|s|$|T|e|s|t|s|<|T+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r| |&| |C+0#ffffff16#ff404010|o|m|p|a|r|a|b|l|e|<|?+0#0000000#ffffff0| |s+0#00e0003&|u|p|e|r| +0#0000000&|T|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| |U|>+0#0000001#ffff4012| +0#0000000#ffffff0@9
+|{| @2|/+0#0000e05&@1| |J|D|K| |2|1|+|.| +0#0000000&@59
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|O+0#0000000#ffffff0|b|j|e|c|t|,| |O|b|j|e|c|t|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| |O|b|j|e|c|t|>+0#0000001#ffff4012| +0#0000000#ffffff0|P|A|R|T|I|A|L| |=| @5
+@24|G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|y|0|(|)|;| @30
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|B+0#0000000#ffffff0|i|g|I|n|t|e|g|e|r|,| |B|i|g|I|n|t|e|g|e|r|>+0#0000001#ffff4012| +0#0000000#ffffff0|F|A|C|T|O|R|I|A|L|_|2|0@2| |=| @8
+@16|G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|<|B|i|g|I|n|t|e|g|e|r|,| |B|i|g|I|n|t|e|g|e|r|>|y|1|(|)| @15
+@8|.|a|p@1|l|y|(|f| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|(|x|.|c|o|m|p|a|r|e|T|o|(|B|i|g|I|n|t|e|g|e|r|.|O|N|E|)| |<| |1+0#e000002&|)+0#0000000&| @16
+@12|?| |B|i|g|I|n|t|e|g|e|r|.|O|N|E| @46
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_01.dump b/runtime/syntax/testdir/dumps/java_generics_signature_01.dump
new file mode 100644
index 0000000..f6c885e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|O+0#0000000#ffffff0|b|j|e|c|t|,| |O|b|j|e|c|t|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| |O|b|j|e|c|t|>+0#0000001#ffff4012| +0#0000000#ffffff0|P|A|R|T|I|A|L| |=| @5
+@24|G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|y|0|(|)|;| @30
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|B+0#0000000#ffffff0|i|g|I|n|t|e|g|e|r|,| |B|i|g|I|n|t|e|g|e|r|>+0#0000001#ffff4012| +0#0000000#ffffff0|F|A|C|T|O|R|I|A|L|_|2|0@2| |=| @8
+@16|G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|<|B|i|g|I|n|t|e|g|e|r|,| |B|i|g|I|n|t|e|g|e|r|>|y|1|(|)| @15
+@8|.|a|p@1|l|y|(|f| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|(|x|.|c|o|m|p|a|r|e|T|o|(|B|i|g|I|n|t|e|g|e|r|.|O|N|E|)| |<| |1+0#e000002&|)+0#0000000&| @16
+@12>?| |B|i|g|I|n|t|e|g|e|r|.|O|N|E| @46
+@12|:| |x|.|m|u|l|t|i|p|l|y|(|f|.|a|p@1|l|y|(|x|.|s|u|b|t|r|a|c|t|(|B|i|g|I|n|t|e|g|e|r|.|O|N|E|)@3|;| @11
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|<|T|1|>| |Y+0#0000001#ffff4012|0|<|T+0#0000000#ffffff0|1|>+0#0000001#ffff4012| +0#0000000#ffffff0|y+0#00e0e07&|0|(|)| +0#0000000&@47
+@4|{| @69
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#00e0e07&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|1|>+0#0000001#ffff4012| +0#0000000#ffffff0|f|)+0#00e0e07&| |-|>| +0#0000000&|f|.|a|p@1|l|y|(| @27
+@20|G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|<|T|1|>|y|0|(|)| @31
+@24|.|a|p@1|l|y|(|f|)@1|;| @39
+@4|}| @69
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|<|T|1|,| |T|2|>| |Y+0#0000001#ffff4012|1|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#0000001#ffff4012| +0#0000000#ffffff0|y+0#00e0e07&|1|(|)| +0#0000000&@39
+@4|{| @69
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(+0#00e0e07&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| |F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#ffffff16#ff404010|>+0#0000001#ffff4012| +0#0000000#ffffff0|f|)+0#00e0e07&| |-|>| +0#0000000&@8
+@12|(+0#00e0e07&|T+0#0000000&|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|f|.|a|p@1|l|y|(|G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|<|T|1|,| |T|2|>|y|1|(|)| @17
+@57|1|9|,|4|-|1|3| @6|1|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_02.dump b/runtime/syntax/testdir/dumps/java_generics_signature_02.dump
new file mode 100644
index 0000000..bfa32c1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@11|(+0#00e0e07&|T+0#0000000&|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|f|.|a|p@1|l|y|(|G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|<|T|1|,| |T|2|>|y|1|(|)| @17
+@24|.|a|p@1|l|y|(|f|)@1| @40
+@16|.|a|p@1|l|y|(|x|)|;| @48
+@4|}| @69
+@75
+@4>s+0#00e0003&|t|a|t|i|c|<+0#0000000&|T|>| |v+0#00e0003&|o|i|d| +0#0000000&|n|o|O|p|(|T| |d|u|m@1|y|)| |{| |}| @38
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|a|l|p|h|a|<|T|>| |{| |}| @48
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|Y+0#0000001#ffff4012|0|<|T+0#0000000#ffffff0|1|>+0#0000001#ffff4012| +0#0000000#ffffff0|e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|1|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| |T|1|>+0#0000001#ffff4012| +0#0000000#ffffff0|{| |}| @11
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|Y+0#0000001#ffff4012|1|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#0000001#ffff4012| +0#0000000#ffffff0|e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#0000001#ffff4012|,+0#0000000#ffffff0| @6
+@20|F+0#0000001#ffff4012|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#0000001#ffff4012|>+0#ffffff16#ff404010|,+0#0000000#ffffff0| @36
+@20|F+0#ffffff16#ff404010|u|n|c|t|i|o|n|<|T+0#0000000#ffffff0|1|,| |T|2|>+0#ffffff16#ff404010|>+0#0000001#ffff4012| +0#0000000#ffffff0|{| |}| @33
+@75
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|I+0#0000001#ffff4012|t|e|r|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@28
+@4|{| @69
+@8|b+0#00e0003&|o@1|l|e|a|n| +0#0000000&|i+0#00e0e07&|s|E|m|p|t|y|(|)|;+0#0000000&| @48
+@8|E| |p+0#00e0e07&|e@1|k|(|)|;+0#0000000&| @57
+@57|3|7|,|2|-|5| @7|2|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_03.dump b/runtime/syntax/testdir/dumps/java_generics_signature_03.dump
new file mode 100644
index 0000000..4ddd510
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|E| |p+0#00e0e07&|e@1|k|(|)|;+0#0000000&| @57
+@8|E| |p+0#00e0e07&|o|p|(|)|;+0#0000000&| @58
+@8|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|p+0#00e0e07&|o|p|A|l@1|(|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|?+0#0000000#ffffff0| |s+0#00e0003&|u|p|e|r| +0#0000000&|E|>+0#0000001#ffff4012| +0#0000000#ffffff0|e|l|e|m|e|n|t|s|)+0#00e0e07&|;+0#0000000&| @15
+@8|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|p+0#00e0e07&|o|p|S|o|m|e|(|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|?+0#0000000#ffffff0| |s+0#00e0003&|u|p|e|r| +0#0000000&|E|>+0#0000001#ffff4012| +0#0000000#ffffff0|e|l|e|m|e|n|t|s|,| @15
+@20|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|?+0#0000000#ffffff0| |s+0#00e0003&|u|p|e|r| +0#0000000&|E|>+0#0000001#ffff4012| +0#0000000#ffffff0|f|i|l|t|e|r|)+0#00e0e07&|;+0#0000000&| @25
+@8>S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|p+0#00e0e07&|u|s|h|(|E+0#0000000&| |e|l|e|m|e|n|t|)+0#00e0e07&|;+0#0000000&| @37
+@8|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|p+0#00e0e07&|u|s|h|A|l@1|(|I+0#0000001#ffff4012|t|e|r|a|b|l|e|<|?+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|E|>+0#0000001#ffff4012| +0#0000000#ffffff0|e|l|e|m|e|n|t|s|)+0#00e0e07&|;+0#0000000&| @13
+@8|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|p+0#00e0e07&|u|s|h|S|o|m|e|(|I+0#0000001#ffff4012|t|e|r|a|b|l|e|<|?+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|E|>+0#0000001#ffff4012| +0#0000000#ffffff0|e|l|e|m|e|n|t|s|,| @13
+@20|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|?+0#0000000#ffffff0| |s+0#00e0003&|u|p|e|r| +0#0000000&|E|>+0#0000001#ffff4012| +0#0000000#ffffff0|f|i|l|t|e|r|)+0#00e0e07&|;+0#0000000&| @25
+@8|S+0#0000001#ffff4012|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|w+0#00e0e07&|i|n|d|(|C+0#0000001#ffff4012|o|n|s|u|m|e|r|<|?+0#0000000#ffffff0| |s+0#00e0003&|u|p|e|r| +0#0000000&|S+0#ffffff16#ff404010|t|a|c|k|a|b|l|e|<|E+0#0000000#ffffff0|>+0#ffffff16#ff404010|>+0#0000001#ffff4012| +0#0000000#ffffff0|a|c|t|i|o|n|)+0#00e0e07&|;+0#0000000&| @9
+@4|}| @69
+@75
+@4|s+0#4040ff13&|e|a|l|e|d| +0#0000000&|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012| +0#0000000#ffffff0@32
+@4|{| @69
+@8|i+0#00e0003&|n|t| +0#0000000&|r+0#00e0e07&|a|d|i|x|(|)|;+0#0000000&| @54
+@8|N| |v+0#00e0e07&|a|l|u|e|(|)|;+0#0000000&| @56
+@4|}| @69
+@75
+@4|r+0#00e0003&|e|c|o|r|d| +0#0000000&|B+0#0000001#ffff4012|i|n|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012|(+0#0000000#ffffff0|N| |v|a|l|u|e|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@15
+@57|5@1|,|3|-|9| @7|4|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_04.dump b/runtime/syntax/testdir/dumps/java_generics_signature_04.dump
new file mode 100644
index 0000000..81606f1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|r+0#00e0003&|e|c|o|r|d| +0#0000000&|B+0#0000001#ffff4012|i|n|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012|(+0#0000000#ffffff0|N| |v|a|l|u|e|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@15
+@4|{| @69
+@8|p+0#00e0003&|u|b|l|i|c| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|r+0#00e0e07&|a|d|i|x|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|2+0#e000002&|;+0#0000000&| |}| @34
+@4|}| @69
+@75
+@4>r+0#00e0003&|e|c|o|r|d| +0#0000000&|D+0#0000001#ffff4012|e|c|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012|(+0#0000000#ffffff0|N| |v|a|l|u|e|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@15
+@4|{| @69
+@8|p+0#00e0003&|u|b|l|i|c| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|r+0#00e0e07&|a|d|i|x|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|1+0#e000002&|0|;+0#0000000&| |}| @33
+@4|}| @69
+@75
+@4|r+0#00e0003&|e|c|o|r|d| +0#0000000&|H+0#0000001#ffff4012|e|x|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012|(+0#0000000#ffffff0|N| |v|a|l|u|e|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@15
+@4|{| @69
+@8|p+0#00e0003&|u|b|l|i|c| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|r+0#00e0e07&|a|d|i|x|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|1+0#e000002&|6|;+0#0000000&| |}| @33
+@4|}| @69
+@75
+@4|r+0#00e0003&|e|c|o|r|d| +0#0000000&|O+0#0000001#ffff4012|c|t|<|N+0#0000000#ffffff0| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|N|u|m|b|e|r|>+0#0000001#ffff4012|(+0#0000000#ffffff0|N| |v|a|l|u|e|)| |i+0#00e0003&|m|p|l|e|m|e|n|t|s| +0#0000000&|N+0#0000001#ffff4012|u|m|<|N+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@15
+@4|{| @69
+@8|p+0#00e0003&|u|b|l|i|c| +0#0000000&|i+0#00e0003&|n|t| +0#0000000&|r+0#00e0e07&|a|d|i|x|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|8+0#e000002&|;+0#0000000&| |}| @34
+@4|}| @69
+@57|7|3|,|2|-|5| @7|5@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_05.dump b/runtime/syntax/testdir/dumps/java_generics_signature_05.dump
new file mode 100644
index 0000000..5f93da4
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|}| @69
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|N+0#0000001#ffff4012|u|m|<|L+0#0000000#ffffff0|o|n|g|>+0#0000001#ffff4012| +0#0000000#ffffff0|f+0#00e0e07&|r|o|m|D|e|c|i|m|a|l|(|l+0#00e0003&|o|n|g| +0#0000000&|x|,| |i+0#00e0003&|n|t| +0#0000000&|r|a|d|i|x|)+0#00e0e07&| +0#0000000&@23
+@4|{| @69
+@8|r+0#00e0003&|e|c|o|r|d| +0#0000000&|P|a|i|r|(|L+0#0000001#ffff4012|o|n|g|F|u|n|c|t|i|o|n|<|N+0#ffffff16#ff404010|u|m|<|L+0#0000000#ffffff0|o|n|g|>+0#ffffff16#ff404010|>+0#0000001#ffff4012| +0#0000000#ffffff0|a|,| @28
+@20>L+0#0000001#ffff4012|o|n|g|F|u|n|c|t|i|o|n|<|S+0#0000000#ffffff0|t|r|i|n|g|>+0#0000001#ffff4012| +0#0000000#ffffff0|b|)| |{| |}| @27
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|P|a|i|r| |p| |=| |s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|r|a|d|i|x|)| |{| @35
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|2+0#e000002&| +0#0000000&|-|>| |n+0#af5f00255&|e|w| +0#0000000&|P|a|i|r|(|B|i|n|:@1|n+0#af5f00255&|e|w|,+0#0000000&| |L|o|n|g|:@1|t|o|B|i|n|a|r|y|S|t|r|i|n|g|)|;| @11
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|8+0#e000002&| +0#0000000&|-|>| |n+0#af5f00255&|e|w| +0#0000000&|P|a|i|r|(|O|c|t|:@1|n+0#af5f00255&|e|w|,+0#0000000&| |L|o|n|g|:@1|t|o|O|c|t|a|l|S|t|r|i|n|g|)|;| @12
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|1+0#e000002&|6| +0#0000000&|-|>| |n+0#af5f00255&|e|w| +0#0000000&|P|a|i|r|(|H|e|x|:@1|n+0#af5f00255&|e|w|,+0#0000000&| |L|o|n|g|:@1|t|o|H|e|x|S|t|r|i|n|g|)|;| @13
+@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&|-|>| |n+0#af5f00255&|e|w| +0#0000000&|P|a|i|r|(|D|e|c|:@1|n+0#af5f00255&|e|w|,+0#0000000&| @33
+@24|y| |-+0#00e0e07&|>| +0#0000000&|L|o|n|g|.|t|o|S|t|r|i|n|g|(|y|)@1|;| @27
+@8|}|;| @64
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|p|.|a|(|)|.|a|p@1|l|y|(|L|o|n|g|.|p|a|r|s|e|L|o|n|g|(|p|.|b|(|)|.|a|p@1|l|y|(|x|)|,| |r|a|d|i|x|)@1|;| @8
+@4|}| @69
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|l+0#00e0003&|o|n|g| +0#0000000&|t+0#00e0e07&|o|D|e|c|i|m|a|l|(|N+0#0000001#ffff4012|u|m|<|L+0#0000000#ffffff0|o|n|g|>+0#0000001#ffff4012| +0#0000000#ffffff0|x|)+0#00e0e07&| +0#0000000&@36
+@4|{| @69
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|L|o|n|g|.|p|a|r|s|e|L|o|n|g|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|x|)| |{| @32
+@57|9|1|,|6|-|2|1| @6|7|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_06.dump b/runtime/syntax/testdir/dumps/java_generics_signature_06.dump
new file mode 100644
index 0000000..c98bd54
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|r+0#af5f00255&|e|t|u|r|n| +0#0000000&|L|o|n|g|.|p|a|r|s|e|L|o|n|g|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|x|)| |{| @32
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|B+0#0000001#ffff4012|i|n|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012|(+0#0000000#ffffff0|L|o|n|g| |b|)| |-|>| |L|o|n|g|.|t|o|B|i|n|a|r|y|S|t|r|i|n|g|(|b|)|;| @16
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|O+0#0000001#ffff4012|c|t|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012|(+0#0000000#ffffff0|L|o|n|g| |o|)| |-|>| |L|o|n|g|.|t|o|O|c|t|a|l|S|t|r|i|n|g|(|o|)|;| @17
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|H+0#0000001#ffff4012|e|x|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012|(+0#0000000#ffffff0|L|o|n|g| |h|)| |-|>| |L|o|n|g|.|t|o|H|e|x|S|t|r|i|n|g|(|h|)|;| @19
+@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&|-|>| |L|o|n|g|.|t|o|S|t|r|i|n|g|(|x|.|v|a|l|u|e|(|)@1|;| @26
+@8>}|,| |x|.|r|a|d|i|x|(|)@1|;| @52
+@4|}| @69
+@75
+@4|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|(| +0#0000000&@41
+@16|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|.|T|Y|P|E|_|U|S|E|)+0#e000e06&| +0#0000000&@16
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|a|g@1|a|b|l|e| @51
+@4|{| @69
+@8|S|t|r|i|n|g| |v+0#00e0e07&|a|l|u|e|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @40
+@4|}| @69
+@75
+@4|{| @69
+@8|i+0#00e0003&|n|t| +0#0000000&|N| |=| |0+0#e000002&|,+0#0000000&| |X| |=| |1+0#e000002&|,+0#0000000&| |Y| |=| |2+0#e000002&|;+0#0000000&| @42
+@8|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|T+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|f| |=| |y|-+0#00e0e07&|>|N+0#0000000&|<|y|.|i|n|t|V|a|l|u|e|(|)|;| @31
+@8|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|T+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|g| |=| |y|-+0#00e0e07&|>|X+0#0000001#ffff4012|<|N+0#0000000#ffffff0|&@1|(|I|n|t|e|g|e|r|)|y|>+0#0000001#ffff4012|N+0#0000000#ffffff0|;| @28
+@57|1|0|9|,|3|-|9| @6|8|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_07.dump b/runtime/syntax/testdir/dumps/java_generics_signature_07.dump
new file mode 100644
index 0000000..fe72261
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|T+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|g| |=| |y|-+0#00e0e07&|>|X+0#0000001#ffff4012|<|N+0#0000000#ffffff0|&@1|(|I|n|t|e|g|e|r|)|y|>+0#0000001#ffff4012|N+0#0000000#ffffff0|;| @28
+@8|b+0#00e0003&|o@1|l|e|a|n|[+0#0000000&|]| |b@1| |=| |{| @50
+@12|X+0#0000001#ffff4012|<|N+0#0000000#ffffff0||@1|N|>+0#0000001#ffff4012|Y+0#0000000#ffffff0|,| |X| |<| |Y|,| |X| |<|Y|,| |X| |<|(|Y|)|,| |X|<|(|Y|)|,| |(|X|)|<|Y|,| @18
+@12|D|o|u|b|l|e|.|i|s|F|i|n|i|t|e|(|X|<@1|Y|)|,| @40
+@12|X|<|=|Y|,| |X|<|(|i+0#00e0003&|n|t|)+0#0000000&|(|b+0#00e0003&|y|t|e|)+0#0000000&|Y|,| |X|<|~|Y|,| |X|<|-|Y|,| |X|<|+|Y|,| @23
+@8>}|;| @64
+@8|C+0#0000001#ffff4012|l|a|s@1|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|k|l|a|s@1| |=| |G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&| @28
+@8|C+0#0000001#ffff4012|l|a|s@1|<| +0#0000000#ffffff0|j+0#ffffff16#ff404010|a|v|a|.|l|a|n|g|.|C|l|a|s@1|<|@+0#e000e06#ffffff0|T|a|g@1|a|b|l|e|(|"+0#e000002&|<|>|"|)+0#e000e06&|i+0#00e0003&|n|t|[+0#0000000&|]|[|]|>+0#ffffff16#ff404010| +0#0000000#ffffff0|[+0#ffffff16#ff404010|]| +0#0000000#ffffff0|[+0#ffffff16#ff404010|]| +0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@12
+@8|[+0#0000001#ffff4012| +0#0000000#ffffff0|]+0#0000001#ffff4012| +0#0000000#ffffff0|[+0#0000001#ffff4012| +0#0000000#ffffff0|]+0#0000001#ffff4012| +0#0000000#ffffff0|$| |[| |]| |[| |]|;| @48
+@8|i+0#af5f00255&|f| +0#0000000&|(|f+0#e000002&|a|l|s|e|)+0#0000000&| |{| |n+0#af5f00255&|e|w| +0#0000000&|G|e|n|e|r|i|c|s|$|T|e|s|t|s|<|>|(|)|;| |}| @28
+@8|a|l|p|h|a|<|?|>| |a|o|;| @54
+@8|a|l|p|h|a|<|U|>| |a|u|;| @54
+@8|a|l|p|h|a|<|a|l|p|h|a|<|U|>@1| |a@1|u|;| @46
+@8|a|l|p|h|a|<|Y+0#0000001#ffff4012|0|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012|>+0#0000000#ffffff0| |a|y|0|o|;| @48
+@8|a|l|p|h|a|<|Y+0#0000001#ffff4012|0|<|U+0#0000000#ffffff0|>+0#0000001#ffff4012|>+0#0000000#ffffff0| |a|y|0|u|;| @48
+@8|Y|0|<|a|l|p|h|a|<|?|>@1| |y|0|a|o|;| @48
+@8|Y|0|<|a|l|p|h|a|<|U|>@1| |y|0|a|u|;| @48
+@4|}| @69
+|}| @73
+@57|1|2|7|,|3|-|9| @6|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_generics_signature_99.dump b/runtime/syntax/testdir/dumps/java_generics_signature_99.dump
new file mode 100644
index 0000000..f637764
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_generics_signature_99.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|P+0#0000001#ffff4012|r|e|d|i|c|a|t|e|<|T+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|g| |=| |y|-+0#00e0e07&|>|X+0#0000001#ffff4012|<|N+0#0000000#ffffff0|&@1|(|I|n|t|e|g|e|r|)|y|>+0#0000001#ffff4012|N+0#0000000#ffffff0|;| @28
+@8|b+0#00e0003&|o@1|l|e|a|n|[+0#0000000&|]| |b@1| |=| |{| @50
+@12|X+0#0000001#ffff4012|<|N+0#0000000#ffffff0||@1|N|>+0#0000001#ffff4012|Y+0#0000000#ffffff0|,| |X| |<| |Y|,| |X| |<|Y|,| |X| |<|(|Y|)|,| |X|<|(|Y|)|,| |(|X|)|<|Y|,| @18
+@12|D|o|u|b|l|e|.|i|s|F|i|n|i|t|e|(|X|<@1|Y|)|,| @40
+@12|X|<|=|Y|,| |X|<|(|i+0#00e0003&|n|t|)+0#0000000&|(|b+0#00e0003&|y|t|e|)+0#0000000&|Y|,| |X|<|~|Y|,| |X|<|-|Y|,| |X|<|+|Y|,| @23
+@8|}|;| @64
+@8|C+0#0000001#ffff4012|l|a|s@1|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0|k|l|a|s@1| |=| |G|e|n|e|r|i|c|s|$|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&| @28
+@8|C+0#0000001#ffff4012|l|a|s@1|<| +0#0000000#ffffff0|j+0#ffffff16#ff404010|a|v|a|.|l|a|n|g|.|C|l|a|s@1|<|@+0#e000e06#ffffff0|T|a|g@1|a|b|l|e|(|"+0#e000002&|<|>|"|)+0#e000e06&|i+0#00e0003&|n|t|[+0#0000000&|]|[|]|>+0#ffffff16#ff404010| +0#0000000#ffffff0|[+0#ffffff16#ff404010|]| +0#0000000#ffffff0|[+0#ffffff16#ff404010|]| +0#0000000#ffffff0|>+0#0000001#ffff4012| +0#0000000#ffffff0@12
+@8|[+0#0000001#ffff4012| +0#0000000#ffffff0|]+0#0000001#ffff4012| +0#0000000#ffffff0|[+0#0000001#ffff4012| +0#0000000#ffffff0|]+0#0000001#ffff4012| +0#0000000#ffffff0|$| |[| |]| |[| |]|;| @48
+@8|i+0#af5f00255&|f| +0#0000000&|(|f+0#e000002&|a|l|s|e|)+0#0000000&| |{| |n+0#af5f00255&|e|w| +0#0000000&|G|e|n|e|r|i|c|s|$|T|e|s|t|s|<|>|(|)|;| |}| @28
+@8|a|l|p|h|a|<|?|>| |a|o|;| @54
+@8|a|l|p|h|a|<|U|>| |a|u|;| @54
+@8|a|l|p|h|a|<|a|l|p|h|a|<|U|>@1| |a@1|u|;| @46
+@8|a|l|p|h|a|<|Y+0#0000001#ffff4012|0|<|?+0#0000000#ffffff0|>+0#0000001#ffff4012|>+0#0000000#ffffff0| |a|y|0|o|;| @48
+@8|a|l|p|h|a|<|Y+0#0000001#ffff4012|0|<|U+0#0000000#ffffff0|>+0#0000001#ffff4012|>+0#0000000#ffffff0| |a|y|0|u|;| @48
+@8|Y|0|<|a|l|p|h|a|<|?|>@1| |y|0|a|o|;| @48
+@8|Y|0|<|a|l|p|h|a|<|U|>@1| |y|0|a|u|;| @48
+@4|}| @69
+>}| @73
+@57|1|4|0|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_00.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_00.dump
new file mode 100644
index 0000000..0ff4f9e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|s|t|y|l|e|'| +0#0000000&@16
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|s|i|g|n|a|t|u|r|e| |=| |1| +0#0000000&@22
+@75
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|;| @34
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|i|n|a|r|y|O|p|e|r|a|t|o|r|;| @33
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|;| @39
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|P|r|e|d|i|c|a|t|e|;| @38
+@75
+|c+0#00e0003&|l|a|s@1| +0#0000000&|L|a|m|b|d|a|E|x|p|r|e|s@1|i|o|n|s|$|T|e|s|t|s| @2|/+0#0000e05&@1| |J|D|K| |2|1|+|.| +0#0000000&@31
+|{| @73
+@4|<|I|1|,| |C|1|,| |C|2|,| |T|1|,| |T|2|,| |T|3|,| |Z|1|,| |Z|2|,| |Z|3|,| |S|1|,| |S|2|,| |S|3|>| |v+0#00e0003&|o|i|d| +0#0000000&|t+0#00e0e07&|e|s|t|(|)| +0#0000000&@10
+@4|{| @2|/+0#0000e05&@1| |S|c|h|ö|n|f|i|n|k|e|l|'|s| |f|u|n|c|t|i|o|n|s|.| +0#0000000&@39
+@8|I|<|I|1|>| |i| |=| |x| |-+0#00e0e07&|>| +0#0000000&|x|;| @49
+@8|C|<|C|1|,| |C|2|>| |c| |=| |x| |-+0#00e0e07&|>| +0#0000000&|y| |-+0#00e0e07&|>| +0#0000000&|x|;| @40
+@8|T|<|T|1|,| |T|2|,| |T|3|>| |t| |=| |f| |-+0#00e0e07&|>| +0#0000000&|y| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|f|.|a|p@1|l|y|(|x|)|.|a|p@1|l|y|(|y|)|;| @13
+@8|Z|<|Z|1|,| |Z|2|,| |Z|3|>| |z| |=| |f| |-+0#00e0e07&|>| +0#0000000&|g| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|f|.|a|p@1|l|y|(|g|.|a|p@1|l|y|(|x|)@1|;| @13
+@8|S|<|S|1|,| |S|2|,| |S|3|>| |s| |=| |f| |-+0#00e0e07&|>| +0#0000000&|g| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|f|.|a|p@1|l|y|(|x|)| @23
+@24|.|a|p@1|l|y|(|g|.|a|p@1|l|y|(|x|)@1|;| @31
+@75
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_01.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_01.dump
new file mode 100644
index 0000000..b5bdac9
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|C|<|C|1|,| |C|2|>| |c| |=| |x| |-+0#00e0e07&|>| +0#0000000&|y| |-+0#00e0e07&|>| +0#0000000&|x|;| @40
+@8|T|<|T|1|,| |T|2|,| |T|3|>| |t| |=| |f| |-+0#00e0e07&|>| +0#0000000&|y| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|f|.|a|p@1|l|y|(|x|)|.|a|p@1|l|y|(|y|)|;| @13
+@8|Z|<|Z|1|,| |Z|2|,| |Z|3|>| |z| |=| |f| |-+0#00e0e07&|>| +0#0000000&|g| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|f|.|a|p@1|l|y|(|g|.|a|p@1|l|y|(|x|)@1|;| @13
+@8|S|<|S|1|,| |S|2|,| |S|3|>| |s| |=| |f| |-+0#00e0e07&|>| +0#0000000&|g| |-+0#00e0e07&|>| +0#0000000&|x| |-+0#00e0e07&|>| +0#0000000&|f|.|a|p@1|l|y|(|x|)| @23
+@24|.|a|p@1|l|y|(|g|.|a|p@1|l|y|(|x|)@1|;| @31
+> @74
+@8|I|<|I|1|>| |i|0|1| |=| |(+0#00e0e07&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @41
+@8|I|<|I|1|>| |i|0|2| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @31
+@8|I|<|I|1|>| |i|0|3| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @21
+@8|I|<|I|1|>| |i|0|4| |=| |(+0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @35
+@8|I|<|I|1|>| |i|0|5| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @25
+@8|I|<|I|1|>| |i|0|6| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @15
+@8|I|<|I|1|>| |i|0|7| |=| |(+0#00e0e07&|I+0#0000000&|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @42
+@8|I|<|I|1|>| |i|0|8| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @32
+@8|I|<|I|1|>| |i|0|9| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @22
+@8|I|<|I|1|>| |i|1|0| |=| |(+0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @36
+@8|I|<|I|1|>| |i|1@1| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @26
+@8|I|<|I|1|>| |i|1|2| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @16
+@75
+@57|1|9|,|0|-|1| @8|9|%|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_02.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_02.dump
new file mode 100644
index 0000000..a597c2f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@8|I|<|I|1|[|]|>| |i@1|0|1| |=| |(+0#00e0e07&|I+0#0000000&|1|.+0#00e0e07&@2| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @36
+@8|I|<|I|1|[|]|>| |i@1|0|2| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1|.+0#00e0e07&@2| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @26
+@8|I|<|I|1|[|]|>| |i@1|0|3| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1|.+0#00e0e07&@2| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @16
+@8|I|<|I|1|[|]|>| |i@1|0|4| |=| |(+0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1|.+0#00e0e07&@2| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @30
+@8>I|<|I|1|[|]|>| |i@1|0|5| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1|.+0#00e0e07&@2| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @20
+@8|I|<|I|1|[|]|>| |i@1|0|6| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1|.+0#00e0e07&@2| +0#0000000&|x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @10
+@75
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|1| |=| |(+0#00e0e07&|v+0#af5f00255&|a|r| +0#0000000&|x|,| |v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @13
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|2| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|,| @16
+@20|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @32
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|3| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&@9
+@20|x|,| |@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @19
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|4| |=| |(+0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|,| @20
+@20|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @36
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|5| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&@17
+@20|v+0#af5f00255&|a|r| +0#0000000&|x|,| |@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @19
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|6| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&@23
+@20|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|,| @32
+@57|3|7|,|3|-|9| @7|2@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_03.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_03.dump
new file mode 100644
index 0000000..d3750b0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@19|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|,| @32
+@20|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&@45
+@20|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @26
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|7| |=| |(+0#00e0e07&|I+0#0000000&|1| |x|,| |I|1| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @15
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|8| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1| |x|,| @17
+@20>@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @33
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|0|9| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1| @10
+@20|x|,| |@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @20
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|1|0| |=| |(+0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |x|,| @21
+@20|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @37
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|1@1| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&@17
+@20|I|1| |x|,| |@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @21
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t|1|2| |=| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&@23
+@20|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |x|,| @33
+@20|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&@45
+@20|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|I|1| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @27
+@75
+@8|R|u|n@1|a|b|l|e| |n|o|O|p| |=| |(+0#00e0e07&|)| |-|>| +0#0000000&|{|}|;| @41
+@8|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t| |=| |(+0#00e0e07&|x+0#0000000&|,| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @23
+@57|5@1|,|6|-|2|1| @6|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_04.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_04.dump
new file mode 100644
index 0000000..c027118
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|B|i|n|a|r|y|O|p|e|r|a|t|o|r|<|I|1|>| |l|e|f|t|C|o|n|s|t| |=| |(+0#00e0e07&|x+0#0000000&|,| |y|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @23
+@8|I|<|I|1|>| |i|d|1| |=| |(+0#00e0e07&|x+0#0000000&|)+0#00e0e07&| |-|>| +0#0000000&|(|x|)|;| @43
+@8|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|u|n|c|h|e|c|k|e|d|"|)+0#e000e06&| +0#0000000&|I|<|I|1|>| |i|d|2| |=| @24
+@16|(@1|I|<|I|<|I|1|>@1|)| |(|I|<|?|>|)| |(|F|u|n|c|t|i|o|n|<|I|1|,| @26
+@20|I|1|>| |x|)| |-|>| |x|)|.|a|p@1|l|y|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|0+0#e000002&|)+0#0000000&| |{| @23
+@16>c+0#af5f00255&|a|s|e| +0#0000000&|(@1|i+0#00e0003&|n|t|)+0#0000000&| |(|b+0#00e0003&|y|t|e|)+0#0000000&| |1+0#e000002&|)+0#0000000&| |-|>| |(+0#00e0e07&|I+0#0000000&|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| @21
+@16|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&|-|>| |(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|I|1| |x|)+0#00e0e07&| |-|>| +0#0000000&|x|;| |}|)|;| @21
+@8|C|<|C|1|,| |C|2|>| |c|o|n|s|t|1| |=| |(+0#00e0e07&|x+0#0000000&|)+0#00e0e07&| |-|>| +0#0000000&|(+0#00e0e07&|y+0#0000000&|)+0#00e0e07&| |-|>| +0#0000000&|(|x|)|;| @29
+@8|C|<|C|1|,| |C|2|>| |c|o|n|s|t|2| |=| |s+0#af5f00255&|w|i|t|c|h|(+0#0000000&|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|"+0#e000002&@1|)+0#0000000&| |{| @27
+@24|c+0#af5f00255&|a|s|e| +0#0000000&|"+0#e000002&|-|>|"|-+0#0000000&|>|"+0#e000002&|(|s|)|-|>|(|s|)|"|;+0#0000000&| @28
+@24|d+0#af5f00255&|e|f|a|u|l|t|-+0#0000000&|>|"+0#e000002&|d|e|f|a|u|l|t|"|;+0#0000000&| |}|)| |{| @26
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|(|"+0#e000002&|-|>|"|)+0#0000000&|-|>|(+0#00e0e07&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&|-|>|(|v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&|-|>|(+0#0000000&|x|)|;| @27
+@12|d+0#af5f00255&|e|f|a|u|l|t|-+0#0000000&|>|(+0#00e0e07&|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|x|)+0#00e0e07&|-|>|(|@+0#e000e06&|T|a|g@1|a|b|l|e| +0#0000000&|v+0#af5f00255&|a|r| +0#0000000&|y|)+0#00e0e07&| +0#0000000&@17
+| +0#00e0e07&@15|-|>|(+0#0000000&|x|)|;| @52
+@8|}|;| @64
+@4|}| @69
+@75
+@4|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|(|E+0#0000000&|l|e|m|e|n|t|T|y|p|e|.|P|A|R|A|M|E|T|E|R|)+0#e000e06&| +0#0000000&@19
+@4|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|R|e|p|e|a|t|a|b|l|e|(|T+0#0000000&|a|g@1|a|b|l|e|s|.|c+0#00e0003&|l|a|s@1|)+0#e000e06&| +0#0000000&@21
+@57|7|3|,|5|-|1|7| @6|4|9|%|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_05.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_05.dump
new file mode 100644
index 0000000..98ab331
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|R|e|p|e|a|t|a|b|l|e|(|T+0#0000000&|a|g@1|a|b|l|e|s|.|c+0#00e0003&|l|a|s@1|)+0#e000e06&| +0#0000000&@21
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|a|g@1|a|b|l|e| |{| |S|t|r|i|n|g|[|]| |v|a|l|u|e|(|)| |d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| |}| @18
+@75
+@4|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|(|E+0#0000000&|l|e|m|e|n|t|T|y|p|e|.|P|A|R|A|M|E|T|E|R|)+0#e000e06&| +0#0000000&@19
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|a|g@1|a|b|l|e|s| |{| |T|a|g@1|a|b|l|e|[|]| |v|a|l|u|e|(|)|;| |}| @26
+> @74
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|I|<|A|1|>| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|F|u|n|c|t|i|o|n|<|A|1|,| |A|1|>| |{| |}| @26
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|C|<|A|1|,| |A|2|>| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|F|u|n|c|t|i|o|n|<|A|1|,| |F|u|n|c|t|i|o|n|<|A|2|,| |A|1|>@1| |{| |}| @8
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|T|<|A|1|,| |A|2|,| |A|3|>| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&@39
+@16|F|u|n|c|t|i|o|n|<|F|u|n|c|t|i|o|n|<|A|1|,| |F|u|n|c|t|i|o|n|<|A|2|,| |A|3|>@1|,| @18
+@20|F|u|n|c|t|i|o|n|<|A|2|,| @42
+@20|F|u|n|c|t|i|o|n|<|A|1|,| |A|3|>@2| |{| |}| @32
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|Z|<|A|1|,| |A|2|,| |A|3|>| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|F|u|n|c|t|i|o|n|<|F|u|n|c|t|i|o|n|<|A|2|,| |A|3|>|,| @12
+@20|F|u|n|c|t|i|o|n|<|F|u|n|c|t|i|o|n|<|A|1|,| |A|2|>|,| @28
+@20|F|u|n|c|t|i|o|n|<|A|1|,| |A|3|>@2| |{| |}| @32
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|S|<|A|1|,| |A|2|,| |A|3|>| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&@39
+@16|F|u|n|c|t|i|o|n|<|F|u|n|c|t|i|o|n|<|A|1|,| |F|u|n|c|t|i|o|n|<|A|2|,| |A|3|>@1|,| @18
+@20|F|u|n|c|t|i|o|n|<|F|u|n|c|t|i|o|n|<|A|1|,| |A|2|>|,| @28
+@20|F|u|n|c|t|i|o|n|<|A|1|,| |A|3|>@2| |{| |}| @32
+@57|9|1|,|0|-|1| @7|6|2|%|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_06.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_06.dump
new file mode 100644
index 0000000..5d936ef
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@19|F|u|n|c|t|i|o|n|<|A|1|,| |A|3|>@2| |{| |}| @32
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|e+0#00e0e07&|c|h|o|(|O+0#0000000&|b|j|e|c|t| |o|)+0#00e0e07&| +0#0000000&|{| |S|y|s|t|e|m|.|o|u|t|.|p|r|i|n|t|l|n|(|o|)|;| |}| @17
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|{| @62
+@8>e+0#00e0003&|n|u|m| +0#0000000&|L|e|t@1|e|r|s| |{| |O|T|H|E|R|,| |A|L|P|H|A|,| |B|E|T|A| |}| @31
+@75
+@8|L|e|t@1|e|r|s| |o|t|h|e|r| |=| |L|e|t@1|e|r|s|.|O|T|H|E|R|;| @36
+@75
+@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|o|t|h|e|r|)| |{| @50
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|L|e|t@1|e|r|s| |a|l|p|h|a| |w+0#af5f00255&|h|e|n| +0#0000000&|L|e|t@1|e|r|s|.|A|L|P|H|A| |=@1| |a|l|p|h|a|:| @19
+@24|{| |e|c|h|o|(|a|l|p|h|a|)|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @27
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|L|e|t@1|e|r|s| |b|e|t|a| |w+0#af5f00255&|h|e|n| +0#0000000&|L|e|t@1|e|r|s|.|B|E|T|A| |=@1| |b|e|t|a|:| @22
+@24|{| |e|c|h|o|(|b|e|t|a|)|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @28
+@8|d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @11|{| |e|c|h|o|(|o|t|h|e|r|)|;| |}| @30
+@8|}| @65
+@75
+@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|o|t|h|e|r|)| |{| @45
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|L|e|t@1|e|r|s| |a|l|p|h|a| |w+0#af5f00255&|h|e|n| +0#0000000&|L|e|t@1|e|r|s|.|A|L|P|H|A| |=@1| |a|l|p|h|a| @16
+@57|1|0|9|,|3|-|9| @6|7|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_07.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_07.dump
new file mode 100644
index 0000000..4b035bf
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@11|c+0#af5f00255&|a|s|e| +0#0000000&|L|e|t@1|e|r|s| |a|l|p|h|a| |w+0#af5f00255&|h|e|n| +0#0000000&|L|e|t@1|e|r|s|.|A|L|P|H|A| |=@1| |a|l|p|h|a| @16
+@24|-|>| |a|l|p|h|a|;| @41
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|L|e|t@1|e|r|s| |b|e|t|a| |w+0#af5f00255&|h|e|n| +0#0000000&|L|e|t@1|e|r|s|.|B|E|T|A| |=@1| |b|e|t|a| @19
+@24|-|>| |b|e|t|a|;| @42
+@12|d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@8|-|>| |o|t|h|e|r|;| @37
+@8>}|)|;| @63
+@75
+@8|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|n+0#e000002&|u|l@1|)+0#0000000&| |{| @51
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r| |w+0#af5f00255&|h|e|n| +0#0000000&|!|"+0#e000002&|<|e|m|p|t|y|>|"|.+0#0000000&|e|q|u|a|l|s|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|s|t|r|)| |{| @13
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r|_| |w+0#af5f00255&|h|e|n| +0#0000000&@41
+@20|P|r|e|d|i|c|a|t|e|.|<|S|t|r|i|n|g|>|n|o|t|(|t|e|x|t| |-+0#00e0e07&|>| +0#0000000&@25
+@28|!|t|e|x|t|.|i|s|E|m|p|t|y|(|)@1| @30
+@24|.|t|e|s|t|(|s|t|r|_|)| @39
+@28|-|>| |"+0#e000002&|<|e|m|p|t|y|>|"|;+0#0000000&| @33
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r|_| @7|-|>| |s|t|r|_|;| @30
+@12|}|)|:| @8|{| |e|c|h|o|(|s|t|r|)|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|n+0#e000002&|u|l@1|:+0#0000000&| |d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @4|{| |e|c|h|o|(|"+0#e000002&|O|t|h|e|r|"|)+0#0000000&|;| |}| @24
+@8|}|;| @64
+@75
+@57|1|2|7|,|3|-|9| @6|8|9|%|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_08.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_08.dump
new file mode 100644
index 0000000..9c40830
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_08.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|n+0#e000002&|u|l@1|)+0#0000000&| |{| @46
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r| |w+0#af5f00255&|h|e|n| +0#0000000&|!|"+0#e000002&|<|e|m|p|t|y|>|"|.+0#0000000&|e|q|u|a|l|s|(| @23
+@28|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|s|t|r|)| |{| @32
+@16|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r|_| |w+0#af5f00255&|h|e|n| +0#0000000&@37
+@20>P|r|e|d|i|c|a|t|e|.|<|S|t|r|i|n|g|>|n|o|t|(|t|e|x|t| |-+0#00e0e07&|>| +0#0000000&@25
+@28|!|t|e|x|t|.|i|s|E|m|p|t|y|(|)@1| @30
+@24|.|t|e|s|t|(|s|t|r|_|)| @39
+@28|-|>| |"+0#e000002&|<|e|m|p|t|y|>|"|;+0#0000000&| @33
+@16|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r|_| @3|-|>| |s|t|r|_|;| @30
+@16|}|)| @5|-|>| |s|t|r|;| @43
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|n+0#e000002&|u|l@1|,+0#0000000&| |d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@1|-|>| |"+0#e000002&|O|t|h|e|r|"|;+0#0000000&| @31
+@8|}|)|;| @63
+@4|}| @69
+|}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|4|5|,|6|-|2|1| @5|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_99.dump b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_99.dump
new file mode 100644
index 0000000..563828a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_lambda_expressions_signature_99.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@11|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r|_| @7|-|>| |s|t|r|_|;| @30
+@12|}|)|:| @8|{| |e|c|h|o|(|s|t|r|)|;| |b+0#af5f00255&|r|e|a|k|;+0#0000000&| |}| @29
+@8|c+0#af5f00255&|a|s|e| +0#0000000&|n+0#e000002&|u|l@1|:+0#0000000&| |d+0#af5f00255&|e|f|a|u|l|t|:+0#0000000&| @4|{| |e|c|h|o|(|"+0#e000002&|O|t|h|e|r|"|)+0#0000000&|;| |}| @24
+@8|}|;| @64
+@75
+@8|e|c|h|o|(|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|n+0#e000002&|u|l@1|)+0#0000000&| |{| @46
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r| |w+0#af5f00255&|h|e|n| +0#0000000&|!|"+0#e000002&|<|e|m|p|t|y|>|"|.+0#0000000&|e|q|u|a|l|s|(| @23
+@28|s+0#af5f00255&|w|i|t|c|h| +0#0000000&|(|s|t|r|)| |{| @32
+@16|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r|_| |w+0#af5f00255&|h|e|n| +0#0000000&@37
+@20|P|r|e|d|i|c|a|t|e|.|<|S|t|r|i|n|g|>|n|o|t|(|t|e|x|t| |-+0#00e0e07&|>| +0#0000000&@25
+@28|!|t|e|x|t|.|i|s|E|m|p|t|y|(|)@1| @30
+@24|.|t|e|s|t|(|s|t|r|_|)| @39
+@28|-|>| |"+0#e000002&|<|e|m|p|t|y|>|"|;+0#0000000&| @33
+@16|c+0#af5f00255&|a|s|e| +0#0000000&|S|t|r|i|n|g| |s|t|r|_| @3|-|>| |s|t|r|_|;| @30
+@16|}|)| @5|-|>| |s|t|r|;| @43
+@12|c+0#af5f00255&|a|s|e| +0#0000000&|n+0#e000002&|u|l@1|,+0#0000000&| |d+0#af5f00255&|e|f|a|u|l|t| +0#0000000&@1|-|>| |"+0#e000002&|O|t|h|e|r|"|;+0#0000000&| @31
+@8|}|)|;| @63
+@4|}| @69
+>}| @73
+@57|1|5|4|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_01.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_01.dump
index 950d878..12d33b0 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent2_01.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_01.dump
@@ -17,4 +17,4 @@
@4|T|ɐ|g@1|a|b|l|ɘ|[|]| |v|a|l|u|e|(|)|;| @51
@2|}| @71
@75
-@57|1|9|,|0|-|1| @7|1|7|%|
+@57|1|9|,|0|-|1| @7|1|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_02.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_02.dump
index 48d31d1..82d03c6 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent2_02.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_02.dump
@@ -13,8 +13,8 @@
@2|/+0#0000e05&@1| |C|O|N|S|T|R|U|C|T|O|R|S|.| +0#0000000&@56
@2|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|I|n|d|e|n|t|2|M|e|t|h|o|d|s|T|e|s|t|s|(|)| |{| |}| @17
@2|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|2|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|,| |V|o|i|d| |v|)| |{| |}| @10
-@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e|x|t|e|n|d|s| |C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|2|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @10
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|2|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @10
@75
@2|/+0#0000e05&@1| |M|E|T|H|O|D|S|.| +0#0000000&@61
| +0#00e0e07&@1|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#00e0e07&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#00e0e07&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#00e0e07&|v+0#00e0003&|o|i|d| +0#00e0e07&|a|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@13
-@57|3|7|,|3| @9|4|2|%|
+@57|3|7|,|3| @9|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_03.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_03.dump
index f388cd9..7858be6 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent2_03.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_03.dump
@@ -17,4 +17,4 @@
@2|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@43
| +0#00e0e07&@1|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#00e0e07&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#00e0e07&|s+0#00e0003&|t|r|i|c|t|f|p| +0#00e0e07&|v+0#00e0003&|o|i|d| +0#00e0e07&|a|s|c|i@1|$|9@1|_|(|)| +0#0000000&@11
@2|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @56
-@57|5@1|,|3| @9|6|7|%|
+@57|5@1|,|3| @9|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_04.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_04.dump
index 0d9fa98..347fafa 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent2_04.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_04.dump
@@ -17,4 +17,4 @@
|e+0#00e0003&|n|u|m| +0#0000000&|E|2| @67
|{| @73
@2|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @36
-@57|7|3|,|3| @9|9|1|%|
+@57|7|3|,|3| @9|7|8|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_05.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_05.dump
new file mode 100644
index 0000000..9981776
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @36
+@2|B|(|"+0#e000002&|b|"| +0#0000000&@67
+@4|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,| @9
+@2|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @54
+@75
+@4>(+0#00e0e07&|)| |-|>| +0#0000000&|{| @63
+@2|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @11
+@2|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @8
+@4|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @43
+@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @14
+@2|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&@6
+@2|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @45
+@75
+@2|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @57
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|2|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @36
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|2|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @26
+@75
+| +0#00e0e07&@1|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#00e0e07&|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}| @5
+|}| @73
+@57|9|1|,|5| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_05.vim b/runtime/syntax/testdir/dumps/java_methods_indent2_05.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_05.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_99.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_99.dump
index 204e85a..5915bd0 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent2_99.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_99.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@3|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@64
-@2|I|n|d|e|n|t|2|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @32
-@2|}| @71
+| +0&#ffffff0@1|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @36
+@2|B|(|"+0#e000002&|b|"| +0#0000000&@67
+@4|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,| @9
+@2|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @54
@75
-| +0#00e0e07&@1|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|C|l|a|s@1|<|?|>| |c|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|n|d|e|n|t|2|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&| |}|
+@4|(+0#00e0e07&|)| |-|>| +0#0000000&|{| @63
+@2|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @11
+@2|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @8
+@4|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @43
+@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @14
+@2|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&@6
+@2|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @45
@75
-@2|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@37
-| +0#00e0e07&@1|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|I|n|d|e|n|t|2|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&| |}| @5
-|}| @73
-@75
-|e+0#00e0003&|n|u|m| +0#0000000&|E|2| @67
-|{| @73
-@2|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @36
-@2|B|(|"+0#e000002&|b|"|)+0#0000000&|,| @65
-@2|C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @57
-@2|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @41
@2|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @57
@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|2|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @36
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|2|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @26
+@75
+| +0#00e0e07&@1|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#00e0e07&|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}| @5
>}| @73
-@57|9|2|,|1| @9|B|o|t|
+@57|1|0|4|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_00.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_00.dump
new file mode 100644
index 0000000..53772c8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|i|n|d|e|n|t|2|'| +0#0000000&@14
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|s|i|g|n|a|t|u|r|e| |=| |1| +0#0000000&@22
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t| |e|n|c|o|d|i|n|g|=|u|t|f|-|8| |t|e|r|m|e|n|c|o|d|i|n|g|=|u|t|f|-|8| +0#0000000&@19
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|;| @34
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|;| @39
+@75
+|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|c+0#00e0003&|l|a|s@1| +0#0000000&|I|n|d|e|n|t|2|$|M|e|t|h|o|d|s|T|e|s|t|s| @39
+|{| |/+0#0000e05&@1| |D|O| |N|O|T| |r|e|t|a|b|!| |T|H|I|S| |F|I|L|E|;| |R|E|M|E|M|B|E|R| |A|B|O|U|T| |t|e|s|t|d|i|r|/|f|t|p|l|u|g|i|n|.| +0#0000000&@12
+@2|/+0#0000e05&@1| |T|Y|P|E|S|.| +0#0000000&@63
+@2|r+0#00e0003&|e|c|o|r|d| +0#0000000&|Τ|ʬ|<|α|>|(|α| |a|)| |{| |}| @51
+@75
+@2|e+0#00e0003&|n|u|m| +0#0000000&|E| @66
+@2|{| @71
+@4|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @39
+@4|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @39
+@4|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @55
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @35
+@2|}| @71
+@75
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_00.vim b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_00.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_00.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_01.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_01.dump
new file mode 100644
index 0000000..12d33b0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @39
+@4|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @39
+@4|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @55
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @35
+@2|}| @71
+> @74
+@2|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@18
+@2|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|R|e|p|e|a|t|a|b|l|e|(|T+0#0000000&|ɐ|g@1|a|b|l|ɘ|s|.|c+0#00e0003&|l|a|s@1|)+0#e000e06&| +0#0000000&@23
+@2|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|ɐ|g@1|a|b|l|ɘ| @53
+@2|{| @71
+@4|S|t|r|i|n|g|[|]| |v|a|l|u|e|(|)| |d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @42
+@2|}| @71
+@75
+@2|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@18
+@2|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|ɐ|g@1|a|b|l|ɘ|s| @52
+@2|{| @71
+@4|T|ɐ|g@1|a|b|l|ɘ|[|]| |v|a|l|u|e|(|)|;| @51
+@2|}| @71
+@75
+@57|1|9|,|0|-|1| @7|1|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_01.vim b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_01.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_01.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_02.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_02.dump
new file mode 100644
index 0000000..9cbda27
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@2|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|S|t|y|l|a|b|l|e|<|Α|>| @51
+@2|{| @71
+@4|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a|s|c|i@1|$|0|_|(|)| |{| |}| @43
+@4|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|Α| |μ|ʭ@1|$|0|_|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @35
+@2>}| @71
+@75
+@2|/+0#0000e05&@1| |F|I|E|L|D|S|.| +0#0000000&@62
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|C|l|a|s@1|<|?|>| |C|L|A|S@1|_|L|O|C|K| |=| |c|l|a|s@1|L|o|c|k|(|)|;| @17
+@75
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|O|b|j|e|c|t| |i|n|s|t|a|n|c|e|L|o|c|k| |=| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)|;| @23
+@75
+@2|/+0#0000e05&@1| |C|O|N|S|T|R|U|C|T|O|R|S|.| +0#0000000&@56
+@2|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|I|n|d|e|n|t|2|$|M|e|t|h|o|d|s|T|e|s|t|s|(|)| |{| |}| @16
+@2|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|2|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|,| |V|o|i|d| |v|)| |{| |}| @9
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|2|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @9
+@75
+@2|/+0#0000e05&@1| |M|E|T|H|O|D|S|.| +0#0000000&@61
+@2|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@13
+@57|3|7|,|3| @9|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_02.vim b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_02.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_02.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_03.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_03.dump
new file mode 100644
index 0000000..33d0921
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@13
+@64|)+0#00e0e07&|;+0#0000000&| @8
+@2|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>| |μ+0#00e0e07&|ʭ@1|$|0|_|(| +0#0000000&@23
+@32|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|β| |b|)+0#00e0e07&|;+0#0000000&| @8
+@75
+@2>@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|1|_|(|/+0#0000e05&|*|/@10|/+0#ffffff16#ff404010|*+0#0000e05#ffffff0|/|)+0#00e0e07&|;+0#0000000&| @15
+@2|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|ʭ@1|$|1|_|(| +0#0000000&@25
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @7
+@75
+@2|v+0#00e0003&|o|i|d| +0#0000000&|A+0#00e0e07&|s|c|i@1|$|2|_|(|)| +0#0000000&|{| |}| @53
+@2|<|T|,| |U| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|S|t|y|l|a|b|l|e|<|T|>@1| |v+0#00e0003&|o|i|d| +0#0000000&|Μ+0#00e0e07&|ʭ@1|$|2|_|(|U+0#0000000&| |u|)+0#00e0e07&| +0#0000000&|{| |}| @25
+@75
+@2|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9|8|_|(|)|;+0#0000000&| @22
+@2|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]|[|]| |μ+0#00e0e07&|ʭ@1|$|9|8|_|(| +0#0000000&@14
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @5
+@75
+@2|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@43
+@2|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9@1|_|(|)| +0#0000000&@11
+@2|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @56
+@57|5@1|,|3| @9|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_03.vim b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_03.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_03.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_04.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_04.dump
new file mode 100644
index 0000000..2f2b6c8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @56
+@75
+@2|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@43
+@2|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|ʭ@1|$|9@1|_|(| +0#0000000&@4
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&| +0#0000000&@6
+@2>{| @71
+@4|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@64
+@2|I|n|d|e|n|t|2|$|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @31
+@2|}| @71
+@75
+@2|p+0#00e0003&|u|b|l|i|c| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|C|l|a|s@1|<|?|>| |c+0#00e0e07&|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|n|d|e|n|t|2|$|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&| |}
+| @74
+@2|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@37
+@2|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|I|n|d|e|n|t|2|$|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&| |}| @4
+|}| @73
+@75
+|e+0#00e0003&|n|u|m| +0#0000000&|E|2|$| @66
+|{| @73
+@2|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @36
+@57|7|3|,|3| @9|7|8|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_04.vim b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_04.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_04.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_05.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_05.dump
new file mode 100644
index 0000000..08ab720
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @36
+@2|B|(|"+0#e000002&|b|"| +0#0000000&@67
+@4|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,| @9
+@2|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @54
+@75
+@4>(+0#00e0e07&|)| |-|>| +0#0000000&|{| @63
+@2|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @11
+@2|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @8
+@4|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @43
+@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @14
+@2|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&@6
+@2|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @45
+@75
+@2|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @57
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|2|$|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @35
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|2|$|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @25
+@75
+@2|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}| @5
+|}| @73
+@57|9|1|,|5| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_05.vim b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_05.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_05.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_99.dump b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_99.dump
new file mode 100644
index 0000000..0d94e63
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_99.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@1|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @36
+@2|B|(|"+0#e000002&|b|"| +0#0000000&@67
+@4|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,| @9
+@2|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @54
+@75
+@4|(+0#00e0e07&|)| |-|>| +0#0000000&|{| @63
+@2|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @11
+@2|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @8
+@4|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @43
+@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @14
+@2|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&@6
+@2|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @45
+@75
+@2|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @57
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|2|$|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @35
+@2|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|2|$|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @25
+@75
+@2|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}| @5
+>}| @73
+@57|1|0|4|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent2_signature_99.vim b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_99.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent2_signature_99.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_01.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_01.dump
index 0f154c5..aea76e5 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent4_01.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_01.dump
@@ -17,4 +17,4 @@
@8|T|ɐ|g@1|a|b|l|ɘ|[|]| |v|a|l|u|e|(|)|;| @47
@4|}| @69
@75
-@57|1|9|,|0|-|1| @7|1|7|%|
+@57|1|9|,|0|-|1| @7|1|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_02.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_02.dump
index ed7c8fb..55410d0 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent4_02.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_02.dump
@@ -13,8 +13,8 @@
@4|/+0#0000e05&@1| |C|O|N|S|T|R|U|C|T|O|R|S|.| +0#0000000&@54
@4|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|I|n|d|e|n|t|4|M|e|t|h|o|d|s|T|e|s|t|s|(|)| |{| |}| @15
@4|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|4|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|,| |V|o|i|d| |v|)| |{| |}| @8
-@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e|x|t|e|n|d|s| |C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|4|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @8
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|4|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @8
@75
@4|/+0#0000e05&@1| |M|E|T|H|O|D|S|.| +0#0000000&@59
| +0#00e0e07&@3|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#00e0e07&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#00e0e07&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#00e0e07&|v+0#00e0003&|o|i|d| +0#00e0e07&|a|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@11
-@57|3|7|,|5| @9|4|2|%|
+@57|3|7|,|5| @9|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_03.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_03.dump
index bed45d9..dae4f3c 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent4_03.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_03.dump
@@ -17,4 +17,4 @@
@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@41
| +0#00e0e07&@3|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#00e0e07&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#00e0e07&|s+0#00e0003&|t|r|i|c|t|f|p| +0#00e0e07&|v+0#00e0003&|o|i|d| +0#00e0e07&|a|s|c|i@1|$|9@1|_|(|)| +0#0000000&@9
@4|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @54
-@57|5@1|,|5| @9|6|7|%|
+@57|5@1|,|5| @9|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_04.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_04.dump
index 9eabb63..a3dd3e6 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent4_04.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_04.dump
@@ -17,4 +17,4 @@
@75
|e+0#00e0003&|n|u|m| +0#0000000&|E|4| @67
|{| @73
-@57|7|3|,|5| @9|9|0|%|
+@57|7|3|,|5| @9|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_05.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_05.dump
new file mode 100644
index 0000000..92bd334
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @34
+@4|B|(|"+0#e000002&|b|"| +0#0000000&@65
+@8|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,| @5
+@4|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @52
+@75
+@8>(+0#00e0e07&|)| |-|>| +0#0000000&|{| @59
+@4|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @9
+@4|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @6
+@8|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @39
+@8|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @10
+@4|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&@4
+@4|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @43
+@75
+@4|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @55
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|4|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @34
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|4|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @24
+@75
+| +0#00e0e07&@3|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#00e0e07&|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}| @3
+|}| @73
+@57|9|1|,|9| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_05.vim b/runtime/syntax/testdir/dumps/java_methods_indent4_05.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_05.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_99.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_99.dump
index 28fa0bc..de8c5b2 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent4_99.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_99.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@3|I|n|d|e|n|t|4|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @30
-@4|}| @69
+| +0&#ffffff0@3|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @34
+@4|B|(|"+0#e000002&|b|"| +0#0000000&@65
+@8|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,| @5
+@4|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @52
@75
-| +0#00e0e07&@3|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|C|l|a|s@1|<|?|>| |c|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|n|d|e|n|t|4|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&|
-|}| @73
+@8|(+0#00e0e07&|)| |-|>| +0#0000000&|{| @59
+@4|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @9
+@4|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @6
+@8|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @39
+@8|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @10
+@4|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&@4
+@4|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @43
@75
-@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@35
-| +0#00e0e07&@3|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|I|n|d|e|n|t|4|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&| |}| @3
-|}| @73
-@75
-|e+0#00e0003&|n|u|m| +0#0000000&|E|4| @67
-|{| @73
-@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @34
-@4|B|(|"+0#e000002&|b|"|)+0#0000000&|,| @63
-@4|C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @55
-@4|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @39
@4|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @55
@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|4|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @34
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|4|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @24
+@75
+| +0#00e0e07&@3|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#00e0e07&|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}| @3
>}| @73
-@57|9|2|,|1| @9|B|o|t|
+@57|1|0|4|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_00.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_00.dump
new file mode 100644
index 0000000..04337ff
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|i|n|d|e|n|t|4|'| +0#0000000&@14
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|s|i|g|n|a|t|u|r|e| |=| |1| +0#0000000&@22
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t| |e|n|c|o|d|i|n|g|=|u|t|f|-|8| |t|e|r|m|e|n|c|o|d|i|n|g|=|u|t|f|-|8| +0#0000000&@19
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|;| @34
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|;| @39
+@75
+|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|c+0#00e0003&|l|a|s@1| +0#0000000&|I|n|d|e|n|t|4|$|M|e|t|h|o|d|s|T|e|s|t|s| @39
+|{| |/+0#0000e05&@1| |D|O| |N|O|T| |r|e|t|a|b|!| |T|H|I|S| |F|I|L|E|;| |R|E|M|E|M|B|E|R| |A|B|O|U|T| |t|e|s|t|d|i|r|/|f|t|p|l|u|g|i|n|.| +0#0000000&@12
+@4|/+0#0000e05&@1| |T|Y|P|E|S|.| +0#0000000&@61
+@4|r+0#00e0003&|e|c|o|r|d| +0#0000000&|Τ|ʬ|<|α|>|(|α| |a|)| |{| |}| @49
+@75
+@4|e+0#00e0003&|n|u|m| +0#0000000&|E| @64
+@4|{| @69
+@8|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @35
+@8|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @35
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @51
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @31
+@4|}| @69
+@75
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_00.vim b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_00.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_00.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_01.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_01.dump
new file mode 100644
index 0000000..aea76e5
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @35
+@8|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @35
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @51
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @31
+@4|}| @69
+> @74
+@4|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@16
+@4|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|R|e|p|e|a|t|a|b|l|e|(|T+0#0000000&|ɐ|g@1|a|b|l|ɘ|s|.|c+0#00e0003&|l|a|s@1|)+0#e000e06&| +0#0000000&@21
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|ɐ|g@1|a|b|l|ɘ| @51
+@4|{| @69
+@8|S|t|r|i|n|g|[|]| |v|a|l|u|e|(|)| |d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @38
+@4|}| @69
+@75
+@4|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@16
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|ɐ|g@1|a|b|l|ɘ|s| @50
+@4|{| @69
+@8|T|ɐ|g@1|a|b|l|ɘ|[|]| |v|a|l|u|e|(|)|;| @47
+@4|}| @69
+@75
+@57|1|9|,|0|-|1| @7|1|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_01.vim b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_01.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_01.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_02.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_02.dump
new file mode 100644
index 0000000..3473b60
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|S|t|y|l|a|b|l|e|<|Α|>| @49
+@4|{| @69
+@8|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a|s|c|i@1|$|0|_|(|)| |{| |}| @39
+@8|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|Α| |μ|ʭ@1|$|0|_|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @31
+@4>}| @69
+@75
+@4|/+0#0000e05&@1| |F|I|E|L|D|S|.| +0#0000000&@60
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|C|l|a|s@1|<|?|>| |C|L|A|S@1|_|L|O|C|K| |=| |c|l|a|s@1|L|o|c|k|(|)|;| @15
+@75
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|O|b|j|e|c|t| |i|n|s|t|a|n|c|e|L|o|c|k| |=| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)|;| @21
+@75
+@4|/+0#0000e05&@1| |C|O|N|S|T|R|U|C|T|O|R|S|.| +0#0000000&@54
+@4|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|I|n|d|e|n|t|4|$|M|e|t|h|o|d|s|T|e|s|t|s|(|)| |{| |}| @14
+@4|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|4|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|,| |V|o|i|d| |v|)| |{| |}| @7
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|4|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @7
+@75
+@4|/+0#0000e05&@1| |M|E|T|H|O|D|S|.| +0#0000000&@59
+@4|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@11
+@57|3|7|,|5| @9|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_02.vim b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_02.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_02.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_03.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_03.dump
new file mode 100644
index 0000000..e4ba873
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@11
+@64|)+0#00e0e07&|;+0#0000000&| @8
+@4|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>| |μ+0#00e0e07&|ʭ@1|$|0|_|(| +0#0000000&@21
+@32|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|β| |b|)+0#00e0e07&|;+0#0000000&| @8
+@75
+@4>@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|1|_|(|/+0#0000e05&|*|/@10|/+0#ffffff16#ff404010|*+0#0000e05#ffffff0|/|)+0#00e0e07&|;+0#0000000&| @13
+@4|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|ʭ@1|$|1|_|(| +0#0000000&@23
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @7
+@75
+@4|v+0#00e0003&|o|i|d| +0#0000000&|A+0#00e0e07&|s|c|i@1|$|2|_|(|)| +0#0000000&|{| |}| @51
+@4|<|T|,| |U| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|S|t|y|l|a|b|l|e|<|T|>@1| |v+0#00e0003&|o|i|d| +0#0000000&|Μ+0#00e0e07&|ʭ@1|$|2|_|(|U+0#0000000&| |u|)+0#00e0e07&| +0#0000000&|{| |}| @23
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9|8|_|(|)|;+0#0000000&| @20
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]|[|]| |μ+0#00e0e07&|ʭ@1|$|9|8|_|(| +0#0000000&@12
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @5
+@75
+@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@41
+@4|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9@1|_|(|)| +0#0000000&@9
+@4|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @54
+@57|5@1|,|5| @9|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_03.vim b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_03.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_03.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_04.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_04.dump
new file mode 100644
index 0000000..2d3c811
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @54
+@75
+@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@41
+@4|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|ʭ@1|$|9@1|_|(| +0#0000000&@2
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&| +0#0000000&@6
+@4>{| @69
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@60
+@4|I|n|d|e|n|t|4|$|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @29
+@4|}| @69
+@75
+@4|p+0#00e0003&|u|b|l|i|c| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|C|l|a|s@1|<|?|>| |c+0#00e0e07&|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|n|d|e|n|t|4|$|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&
+| |}| @72
+@75
+@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@35
+@4|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|I|n|d|e|n|t|4|$|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&| |}| @2
+|}| @73
+@75
+|e+0#00e0003&|n|u|m| +0#0000000&|E|4|$| @66
+|{| @73
+@57|7|3|,|5| @9|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_04.vim b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_04.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_04.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_05.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_05.dump
new file mode 100644
index 0000000..a113f99
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @34
+@4|B|(|"+0#e000002&|b|"| +0#0000000&@65
+@8|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,| @5
+@4|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @52
+@75
+@8>(+0#00e0e07&|)| |-|>| +0#0000000&|{| @59
+@4|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @9
+@4|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @6
+@8|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @39
+@8|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @10
+@4|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&@4
+@4|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @43
+@75
+@4|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @55
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|4|$|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @33
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|4|$|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @23
+@75
+@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}| @3
+|}| @73
+@57|9|1|,|9| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_05.vim b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_05.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_05.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_99.dump b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_99.dump
new file mode 100644
index 0000000..11cc1cb
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_99.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @34
+@4|B|(|"+0#e000002&|b|"| +0#0000000&@65
+@8|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,| @5
+@4|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @52
+@75
+@8|(+0#00e0e07&|)| |-|>| +0#0000000&|{| @59
+@4|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @9
+@4|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @6
+@8|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @39
+@8|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @10
+@4|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&@4
+@4|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @43
+@75
+@4|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @55
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|4|$|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @33
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|4|$|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @23
+@75
+@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}| @3
+>}| @73
+@57|1|0|4|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent4_signature_99.vim b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_99.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent4_signature_99.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_01.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_01.dump
index 269034b..9c6b06f 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent8_01.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_01.dump
@@ -17,4 +17,4 @@
@16|T|ɐ|g@1|a|b|l|ɘ|[|]| |v|a|l|u|e|(|)|;| @39
@8|}| @65
@75
-@57|1|9|,|0|-|1| @7|1|7|%|
+@57|1|9|,|0|-|1| @7|1|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_02.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_02.dump
index e5c7acc..9555abb 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent8_02.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_02.dump
@@ -13,8 +13,8 @@
@8|/+0#0000e05&@1| |C|O|N|S|T|R|U|C|T|O|R|S|.| +0#0000000&@50
@8|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|I|n|d|e|n|t|8|M|e|t|h|o|d|s|T|e|s|t|s|(|)| |{| |}| @11
@8|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|8|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|,| |V|o|i|d| |v|)| |{| |}| @4
-@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e|x|t|e|n|d|s| |C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|8|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @4
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|8|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @4
@75
@8|/+0#0000e05&@1| |M|E|T|H|O|D|S|.| +0#0000000&@55
| +0#00e0e07&@7|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#00e0e07&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#00e0e07&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#00e0e07&|v+0#00e0003&|o|i|d| +0#00e0e07&|a|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@7
-@57|3|7|,|9| @9|4|2|%|
+@57|3|7|,|9| @9|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_03.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_03.dump
index e80c44d..a163e39 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent8_03.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_03.dump
@@ -17,4 +17,4 @@
@8|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@37
| +0#00e0e07&@7|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|f+0#4040ff13&|i|n|a|l| +0#00e0e07&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#00e0e07&|s+0#00e0003&|t|r|i|c|t|f|p| +0#00e0e07&|v+0#00e0003&|o|i|d| +0#00e0e07&|a|s|c|i@1|$|9@1|_|(|)| +0#0000000&@5
@8|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @50
-@57|5@1|,|9| @9|6|7|%|
+@57|5@1|,|9| @9|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_04.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_04.dump
index 8ec6396..c084a21 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent8_04.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_04.dump
@@ -17,4 +17,4 @@
@75
|e+0#00e0003&|n|u|m| +0#0000000&|E|8| @67
|{| @73
-@57|7|3|,|9| @9|9|0|%|
+@57|7|3|,|9| @9|7|8|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_05.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_05.dump
new file mode 100644
index 0000000..0ea9251
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @30
+@8|B|(|"+0#e000002&|b|"| +0#0000000&@61
+@16|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,
+| @7|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @48
+@75
+@16>(+0#00e0e07&|)| |-|>| +0#0000000&|{| @51
+@8|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @5
+@8|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @2
+@16|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @31
+@16|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @2
+@8|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&
+@8|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @39
+@75
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @51
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|8|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @30
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|8|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @20
+@75
+| +0#00e0e07&@7|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#00e0e07&|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}
+@1| @73
+@57|9|1|,|1|7| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_05.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_05.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_05.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_99.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_99.dump
index d20fbe1..22a4994 100644
--- a/runtime/syntax/testdir/dumps/java_methods_indent8_99.dump
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_99.dump
@@ -1,20 +1,20 @@
-| +0&#ffffff0@7|I|n|d|e|n|t|8|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @26
-@8|}| @65
+| +0&#ffffff0@7|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @30
+@8|B|(|"+0#e000002&|b|"| +0#0000000&@61
+@16|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,
+| @7|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @48
@75
-| +0#00e0e07&@7|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|s+0#00e0003&|t|a|t|i|c| +0#00e0e07&|C|l|a|s@1|<|?|>| |c|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|n|d|e|n|t|8|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l|a
-|s@1|;+0#0000000&| |}| @69
+@16|(+0#00e0e07&|)| |-|>| +0#0000000&|{| @51
+@8|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @5
+@8|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @2
+@16|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @31
+@16|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @2
+@8|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&
+@8|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @39
@75
-@8|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@31
-| +0#00e0e07&@7|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|I|n|d|e|n|t|8|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&| |}
-@1| @73
-@75
-|e+0#00e0003&|n|u|m| +0#0000000&|E|8| @67
-|{| @73
-@8|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @30
-@8|B|(|"+0#e000002&|b|"|)+0#0000000&|,| @59
-@8|C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @51
-@8|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @35
@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @51
@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|8|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @30
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|8|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @20
+@75
+| +0#00e0e07&@7|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#00e0e07&|p+0#00e0003&|u|b|l|i|c| +0#00e0e07&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}
>}| @73
-@57|9|2|,|1| @9|B|o|t|
+@57|1|0|4|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_00.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_00.dump
new file mode 100644
index 0000000..95cd3e2
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|i|n|d|e|n|t|8|'| +0#0000000&@14
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|s|i|g|n|a|t|u|r|e| |=| |1| +0#0000000&@22
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t| |e|n|c|o|d|i|n|g|=|u|t|f|-|8| |t|e|r|m|e|n|c|o|d|i|n|g|=|u|t|f|-|8| +0#0000000&@19
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|;| @34
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|;| @39
+@75
+|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|c+0#00e0003&|l|a|s@1| +0#0000000&|I|n|d|e|n|t|8|$|M|e|t|h|o|d|s|T|e|s|t|s| @39
+|{| |/+0#0000e05&@1| |D|O| |N|O|T| |r|e|t|a|b|!| |T|H|I|S| |F|I|L|E|;| |R|E|M|E|M|B|E|R| |A|B|O|U|T| |t|e|s|t|d|i|r|/|f|t|p|l|u|g|i|n|.| +0#0000000&@12
+@8|/+0#0000e05&@1| |T|Y|P|E|S|.| +0#0000000&@57
+@8|r+0#00e0003&|e|c|o|r|d| +0#0000000&|Τ|ʬ|<|α|>|(|α| |a|)| |{| |}| @45
+@75
+@8|e+0#00e0003&|n|u|m| +0#0000000&|E| @60
+@8|{| @65
+@16|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @27
+@16|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @27
+@16|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @43
+@16|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @23
+@8|}| @65
+@75
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_00.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_00.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_00.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_01.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_01.dump
new file mode 100644
index 0000000..9c6b06f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@15|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @27
+@16|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @27
+@16|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @43
+@16|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @23
+@8|}| @65
+> @74
+@8|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@12
+@8|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|R|e|p|e|a|t|a|b|l|e|(|T+0#0000000&|ɐ|g@1|a|b|l|ɘ|s|.|c+0#00e0003&|l|a|s@1|)+0#e000e06&| +0#0000000&@17
+@8|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|ɐ|g@1|a|b|l|ɘ| @47
+@8|{| @65
+@16|S|t|r|i|n|g|[|]| |v|a|l|u|e|(|)| |d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @30
+@8|}| @65
+@75
+@8|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@12
+@8|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|ɐ|g@1|a|b|l|ɘ|s| @46
+@8|{| @65
+@16|T|ɐ|g@1|a|b|l|ɘ|[|]| |v|a|l|u|e|(|)|;| @39
+@8|}| @65
+@75
+@57|1|9|,|0|-|1| @7|1|5|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_01.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_01.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_01.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_02.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_02.dump
new file mode 100644
index 0000000..cd42b6d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@8|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|S|t|y|l|a|b|l|e|<|Α|>| @45
+@8|{| @65
+@16|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a|s|c|i@1|$|0|_|(|)| |{| |}| @31
+@16|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|Α| |μ|ʭ@1|$|0|_|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @23
+@8>}| @65
+@75
+@8|/+0#0000e05&@1| |F|I|E|L|D|S|.| +0#0000000&@56
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|C|l|a|s@1|<|?|>| |C|L|A|S@1|_|L|O|C|K| |=| |c|l|a|s@1|L|o|c|k|(|)|;| @11
+@75
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|O|b|j|e|c|t| |i|n|s|t|a|n|c|e|L|o|c|k| |=| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)|;| @17
+@75
+@8|/+0#0000e05&@1| |C|O|N|S|T|R|U|C|T|O|R|S|.| +0#0000000&@50
+@8|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|I|n|d|e|n|t|8|$|M|e|t|h|o|d|s|T|e|s|t|s|(|)| |{| |}| @10
+@8|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|8|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|,| |V|o|i|d| |v|)| |{| |}| @3
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |I|n|d|e|n|t|8|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @3
+@75
+@8|/+0#0000e05&@1| |M|E|T|H|O|D|S|.| +0#0000000&@55
+@8|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@7
+@57|3|7|,|9| @9|3|6|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_02.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_02.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_02.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_03.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_03.dump
new file mode 100644
index 0000000..c06f3c3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@7
+@64|)+0#00e0e07&|;+0#0000000&| @8
+@8|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>| |μ+0#00e0e07&|ʭ@1|$|0|_|(| +0#0000000&@17
+@32|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|β| |b|)+0#00e0e07&|;+0#0000000&| @8
+@75
+@8>@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|1|_|(|/+0#0000e05&|*|/@10|/+0#ffffff16#ff404010|*+0#0000e05#ffffff0|/|)+0#00e0e07&|;+0#0000000&| @9
+@8|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|ʭ@1|$|1|_|(| +0#0000000&@19
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @7
+@75
+@8|v+0#00e0003&|o|i|d| +0#0000000&|A+0#00e0e07&|s|c|i@1|$|2|_|(|)| +0#0000000&|{| |}| @47
+@8|<|T|,| |U| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|S|t|y|l|a|b|l|e|<|T|>@1| |v+0#00e0003&|o|i|d| +0#0000000&|Μ+0#00e0e07&|ʭ@1|$|2|_|(|U+0#0000000&| |u|)+0#00e0e07&| +0#0000000&|{| |}| @19
+@75
+@8|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9|8|_|(|)|;+0#0000000&| @16
+@8|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]|[|]| |μ+0#00e0e07&|ʭ@1|$|9|8|_|(| +0#0000000&@8
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @5
+@75
+@8|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@37
+@8|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9@1|_|(|)| +0#0000000&@5
+@8|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @50
+@57|5@1|,|9| @9|5|7|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_03.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_03.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_03.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_04.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_04.dump
new file mode 100644
index 0000000..3f4e4ed
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@8|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@37
+@8|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|ʭ@1|$|9@1|_
+|(| +0#0000000&@73
+@24|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&| +0#0000000&@6
+@8>{| @65
+@16|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@52
+@8|I|n|d|e|n|t|8|$|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @25
+@8|}| @65
+@75
+@8|p+0#00e0003&|u|b|l|i|c| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|C|l|a|s@1|<|?|>| |c+0#00e0e07&|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|I|n|d|e|n|t|8|$|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l
+|a|s@1|;+0#0000000&| |}| @68
+@75
+@8|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@31
+@8|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|I|n|d|e|n|t|8|$|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&|
+|}| @73
+|}| @73
+@75
+|e+0#00e0003&|n|u|m| +0#0000000&|E|8|$| @66
+@57|7|3|,|9| @9|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_04.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_04.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_04.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_05.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_05.dump
new file mode 100644
index 0000000..52d6346
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @30
+@8|B|(|"+0#e000002&|b|"| +0#0000000&@61
+@16|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,
+| @7|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @48
+@75
+@16>(+0#00e0e07&|)| |-|>| +0#0000000&|{| @51
+@8|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @5
+@8|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @2
+@16|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @31
+@16|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @2
+@8|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&
+@8|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @39
+@75
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @51
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|8|$|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @29
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|8|$|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @19
+@75
+@8|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}
+@1| @73
+@57|9|1|,|1|7| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_05.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_05.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_05.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_99.dump b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_99.dump
new file mode 100644
index 0000000..c4b8587
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_99.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|A|(|"+0#e000002&|a|"|)+0#0000000&|,| @30
+@8|B|(|"+0#e000002&|b|"| +0#0000000&@61
+@16|/+0#0000e05&|*|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|/|\|*|/|)+0#0000000&|,
+| @7|C|(|"+0#e000002&|c|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|T|h|r|e|a|d|(| @48
+@75
+@16|(+0#00e0e07&|)| |-|>| +0#0000000&|{| @51
+@8|}|)@1|,| |D|(|"+0#e000002&|d|"|,+0#0000000&| |(|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|B|o@1|l|e|a|n|S|u|p@1|l|i|e|r|)| |(+0#00e0e07&|)| |-|>| +0#0000000&|t+0#e000002&|r|u|e|)+0#0000000&|,| @5
+@8|E|(|"+0#e000002&|e|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|c+0#00e0003&|h|a|r|[+0#0000000&|]| |{| |'+0#e000002&|a|'|,+0#0000000&| |'+0#e000002&|b|'|,+0#0000000&| |'+0#e000002&|c|'|,+0#0000000&| |'+0#e000002&|d|'| +0#0000000&|}|)|,| |F|(|"+0#e000002&|f|"|,+0#0000000&| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)| |{| @2
+@16|t+0#00e0003&|r|a|n|s|i|e|n|t| +0#0000000&|S|t|r|i|n|g| |n|a|m|e| |=| |"+0#e000002&@1|;+0#0000000&| @31
+@16|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t|o|S|t|r|i|n|g|(|)| |{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|t+0#00e0003&|h|i|s|.+0#0000000&|n|a|m|e|;| |}| @2
+@8|}|)|,| |/+0#0000e05&@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1|\|/@1| +0#0000000&
+@8|G|(|"+0#e000002&|g|"|)+0#0000000&|,| |@+0#e000e06&|D|e|p|r|e|c|a|t|e|d| +0#0000000&|H|(|"+0#e000002&|h|"|)+0#0000000&|;| @39
+@75
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @51
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|8|$|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @29
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|δ|>| |E|8|$|(|S|t|r|i|n|g| |s|,| |δ| |d|u|m@1|y|)| |{| |t+0#00e0003&|h|i|s|(+0#0000000&|s|)|;| |}| @19
+@75
+@8|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n|a|m|e|(|)|.|t|o|U|p@1|e|r|C|a|s|e|(|)|;| |}
+>}| @73
+@57|1|0|4|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_indent8_signature_99.vim b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_99.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_indent8_signature_99.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_00.dump b/runtime/syntax/testdir/dumps/java_methods_style_signature_00.dump
new file mode 100644
index 0000000..06d396f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_00.dump
@@ -0,0 +1,20 @@
+>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|f|u|n|c|t|i|o|n|s| |=| |'|s|t|y|l|e|'| +0#0000000&@16
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|h|i|g|h|l|i|g|h|t|_|s|i|g|n|a|t|u|r|e| |=| |1| +0#0000000&@22
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t| |e|n|c|o|d|i|n|g|=|u|t|f|-|8| |t|e|r|m|e|n|c|o|d|i|n|g|=|u|t|f|-|8| +0#0000000&@19
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|E|l|e|m|e|n|t|T|y|p|e|;| @34
+|i+0#e000e06&|m|p|o|r|t| +0#0000000&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|T|a|r|g|e|t|;| @39
+@75
+|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|c+0#00e0003&|l|a|s@1| +0#0000000&|S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s| @41
+|{| @73
+@4|/+0#0000e05&@1| |T|Y|P|E|S|.| +0#0000000&@61
+@4|r+0#00e0003&|e|c|o|r|d| +0#0000000&|Τ|ʬ|<|α|>|(|α| |a|)| |{| |}| @49
+@75
+@4|e+0#00e0003&|n|u|m| +0#0000000&|E| @64
+@4|{| @69
+@8|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @35
+@8|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @35
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @51
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @31
+@4|}| @69
+@75
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_00.vim b/runtime/syntax/testdir/dumps/java_methods_style_signature_00.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_00.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_01.dump b/runtime/syntax/testdir/dumps/java_methods_style_signature_01.dump
new file mode 100644
index 0000000..95bb936
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_01.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|A|(|"+0#e000002&|a|"|)+0#0000000&|,| |B|(|"+0#e000002&|b|"|)+0#0000000&|,| |C|(|"+0#e000002&|c|"|)+0#0000000&|,| |D|(|"+0#e000002&|d|"|)+0#0000000&|,| @35
+@8|E|(|"+0#e000002&|e|"|)+0#0000000&|,| |F|(|"+0#e000002&|f|"|)+0#0000000&|,| |G|(|"+0#e000002&|g|"|)+0#0000000&|,| |H|(|"+0#e000002&|h|"|)+0#0000000&|;| @35
+@8|f+0#4040ff13&|i|n|a|l| +0#0000000&|S|t|r|i|n|g| |s|;| @51
+@8|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|E|(|S|t|r|i|n|g| |s|)| |{| |t+0#00e0003&|h|i|s|.+0#0000000&|s| |=| |s|;| |}| @31
+@4|}| @69
+> @74
+@4|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@16
+@4|@+0#e000e06&|j|a|v|a|.|l|a|n|g|.|a|n@1|o|t|a|t|i|o|n|.|R|e|p|e|a|t|a|b|l|e|(|T+0#0000000&|ɐ|g@1|a|b|l|ɘ|s|.|c+0#00e0003&|l|a|s@1|)+0#e000e06&| +0#0000000&@21
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|ɐ|g@1|a|b|l|ɘ| @51
+@4|{| @69
+@8|S|t|r|i|n|g|[|]| |v+0#00e0e07&|a|l|u|e|(|)| +0#0000000&|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|"+0#e000002&@1|;+0#0000000&| @38
+@4|}| @69
+@75
+@4|@+0#e000e06&|T|a|r|g|e|t|(|{+0#0000000&|E|l|e|m|e|n|t|T|y|p|e|.|M|E|T|H|O|D|,| |E|l|e|m|e|n|t|T|y|p|e|.|C|O|N|S|T|R|U|C|T|O|R|}|)+0#e000e06&| +0#0000000&@16
+@4|@+0#00e0003&|i|n|t|e|r|f|a|c|e| +0#0000000&|T|ɐ|g@1|a|b|l|ɘ|s| @50
+@4|{| @69
+@8|T|ɐ|g@1|a|b|l|ɘ|[|]| |v+0#00e0e07&|a|l|u|e|(|)|;+0#0000000&| @47
+@4|}| @69
+@75
+@57|1|9|,|0|-|1| @7|2|0|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_01.vim b/runtime/syntax/testdir/dumps/java_methods_style_signature_01.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_01.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_02.dump b/runtime/syntax/testdir/dumps/java_methods_style_signature_02.dump
new file mode 100644
index 0000000..e379c69
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_02.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+@4|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|S|t|y|l|a|b|l|e|<|Α|>| @49
+@4|{| @69
+@8|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|)| +0#0000000&|{| |}| @39
+@8|d+0#4040ff13&|e|f|a|u|l|t| +0#0000000&|Α| |μ+0#00e0e07&|ʭ@1|$|0|_|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|n+0#e000002&|u|l@1|;+0#0000000&| |}| @31
+@4>}| @69
+@75
+@4|/+0#0000e05&@1| |F|I|E|L|D|S|.| +0#0000000&@60
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|C|l|a|s@1|<|?|>| |C|L|A|S@1|_|L|O|C|K| |=| |c|l|a|s@1|L|o|c|k|(|)|;| @15
+@75
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|O|b|j|e|c|t| |i|n|s|t|a|n|c|e|L|o|c|k| |=| |n+0#af5f00255&|e|w| +0#0000000&|O|b|j|e|c|t|(|)|;| @21
+@75
+@4|/+0#0000e05&@1| |C|O|N|S|T|R|U|C|T|O|R|S|.| +0#0000000&@54
+@4|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s|(|)| |{| |}| @16
+@4|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|,| |V|o|i|d| |v|)| |{| |}| @9
+@4|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|<|T| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|C|o|m|p|a|r|a|b|l|e|<|T|>@1| |S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s|(|T| |t|)| |{| |}| @9
+@75
+@4|/+0#0000e05&@1| |M|E|T|H|O|D|S|.| +0#0000000&@59
+@4|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@11
+@57|3|7|,|2|-|5| @7|4|9|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_02.vim b/runtime/syntax/testdir/dumps/java_methods_style_signature_02.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_02.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_03.dump b/runtime/syntax/testdir/dumps/java_methods_style_signature_03.dump
new file mode 100644
index 0000000..aa92f2d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_03.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|0|_|(|/+0#0000e05&@15| +0#0000000&@11
+@32|)+0#00e0e07&|;+0#0000000&| @40
+@4|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|a+0#4040ff13&|b|s|t|r|a|c|t| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>| |μ+0#00e0e07&|ʭ@1|$|0|_|(| +0#0000000&@21
+@16|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|b|e|s|p|o|k|e|"|)+0#e000e06&| +0#0000000&|β| |b|)+0#00e0e07&|;+0#0000000&| @24
+@75
+@4>@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|1|_|(|/+0#0000e05&|*|/@10|/+0#ffffff16#ff404010|*+0#0000e05#ffffff0|/|)+0#00e0e07&|;+0#0000000&| @13
+@4|@+0#e000e06&|T|ɐ|g@1|a|b|l|ɘ| +0#0000000&|p+0#00e0003&|r|i|v|a|t|e| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|ʭ@1|$|1|_|(| +0#0000000&@23
+@12|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @19
+@75
+@4|v+0#00e0003&|o|i|d| +0#0000000&|A|s|c|i@1|$|2|_|(|)| |{| |}| @51
+@4|<|T|,| |U| |e+0#00e0003&|x|t|e|n|d|s| +0#0000000&|S|t|y|l|a|b|l|e|<|T|>@1| |v+0#00e0003&|o|i|d| +0#0000000&|Μ|ʭ@1|$|2|_|(|U| |u|)| |{| |}| @23
+@75
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9|8|_|(|)|;+0#0000000&| @20
+@4|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|n+0#e000e06&|a|t|i|v|e| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]|[|]| |μ+0#00e0e07&|ʭ@1|$|9|8|_|(| +0#0000000&@12
+@12|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @17
+@75
+@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@41
+@4|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9@1|_|(|)| +0#0000000&@9
+@4|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @54
+@57|5@1|,|2|-|5| @7|7@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_03.vim b/runtime/syntax/testdir/dumps/java_methods_style_signature_03.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_03.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_04.dump b/runtime/syntax/testdir/dumps/java_methods_style_signature_04.dump
new file mode 100644
index 0000000..e657f31
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_04.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@3|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @54
+@75
+@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@41
+@4|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|ʭ@1|$|9@1|_|(| +0#0000000&@2
+@12|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&| +0#0000000&@18
+@4>{| @69
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@60
+@4|S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @31
+@4|}| @69
+@75
+@4|p+0#00e0003&|u|b|l|i|c| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|C|l|a|s@1|<|?|>| |c+0#00e0e07&|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&| |}
+| @74
+@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@35
+@4|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&| |}| @4
+|}| @73
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|7|3|,|2|-|5| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_04.vim b/runtime/syntax/testdir/dumps/java_methods_style_signature_04.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_04.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_99.dump b/runtime/syntax/testdir/dumps/java_methods_style_signature_99.dump
new file mode 100644
index 0000000..7467b7d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_99.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@11|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&|;+0#0000000&| @17
+@75
+@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@41
+@4|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|v+0#00e0003&|o|i|d| +0#0000000&|a+0#00e0e07&|s|c|i@1|$|9@1|_|(|)| +0#0000000&@9
+@4|{| |a|s|c|i@1|$|9|8|_|(|)|;| |}| @54
+@75
+@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|s|t|r|i|c|t|f|p|"|)+0#e000e06&| +0#0000000&@41
+@4|p+0#00e0003&|r|o|t|e|c|t|e|d| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|f+0#4040ff13&|i|n|a|l| +0#0000000&|s+0#00e0003&|y|n|c|h|r|o|n|i|z|e|d| +0#0000000&|s+0#00e0003&|t|r|i|c|t|f|p| +0#0000000&|<|α|,| |β|>| |Τ|ʬ|<|α|>|[|]| |μ+0#00e0e07&|ʭ@1|$|9@1|_|(| +0#0000000&@2
+@12|j|a|v|a|.|u|t|i|l|.|f|u|n|c|t|i|o|n|.|F|u|n|c|t|i|o|n|<|β|,| |Τ|ʬ|<|α|>|[|]|[|]|>| |ƒ|)+0#00e0e07&| +0#0000000&@18
+@4|{| @69
+@8|r+0#af5f00255&|e|t|u|r|n| +0#0000000&@60
+@4|S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s|.|<|α|,| |β|>|μ|ʭ@1|$|9|8|_|(|ƒ|)|[|0+0#e000002&|]+0#0000000&|;| @31
+@4|}| @69
+@75
+@4|p+0#00e0003&|u|b|l|i|c| +0#0000000&|s+0#00e0003&|t|a|t|i|c| +0#0000000&|C|l|a|s@1|<|?|>| |c+0#00e0e07&|l|a|s@1|L|o|c|k|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s|.|c+0#00e0003&|l|a|s@1|;+0#0000000&| |}
+| @74
+@4|@+0#e000e06&|O|v|e|r@1|i|d|e| +0#0000000&|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|"+0#e000002&|c|a|s|t|"|)+0#e000e06&| +0#0000000&@35
+@4|p+0#00e0003&|u|b|l|i|c| +0#0000000&|S|t|r|i|n|g| |t+0#00e0e07&|o|S|t|r|i|n|g|(|)| +0#0000000&|{| |r+0#af5f00255&|e|t|u|r|n| +0#0000000&|(|S|t|r|i|n|g|)| |"+0#e000002&|S|t|y|l|e|$|M|e|t|h|o|d|s|T|e|s|t|s|"|;+0#0000000&| |}| @4
+>}| @73
+@57|8|2|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_methods_style_signature_99.vim b/runtime/syntax/testdir/dumps/java_methods_style_signature_99.vim
new file mode 100644
index 0000000..1509558
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_methods_style_signature_99.vim
@@ -0,0 +1,2 @@
+" Replace known non-Latin-1 characters.
+%s+[ƒɐɘʬʭΑ-Ωα-ω�]+?+Ige
diff --git a/runtime/syntax/testdir/input/java_annotations_signature.java b/runtime/syntax/testdir/input/java_annotations_signature.java
new file mode 100644
index 0000000..8236218
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_annotations_signature.java
@@ -0,0 +1,78 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'style'
+// VIM_TEST_SETUP let g:java_highlight_signature = 1
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+class Annotations$Tests
+{
+ @Target(ElementType.TYPE_USE)
+ @interface Tag
+ {
+ String value() default "";
+ String kind() default "";
+ }
+
+ @Target(ElementType.TYPE_USE)
+ @interface Text
+ {
+ String[] value() default {""};
+ }
+
+ @Target({
+ ElementType.METHOD,
+ ElementType.PARAMETER,
+ ElementType.TYPE,
+ })
+ @interface Labels
+ {
+ Label[] value();
+ }
+
+ @java.lang.annotation.Target({
+ java.lang.annotation.ElementType.METHOD,
+ java.lang.annotation.ElementType.PARAMETER,
+ java.lang.annotation.ElementType.TYPE,
+ })
+ @java.lang.annotation.Repeatable(Labels.class)
+ @interface Label
+ {
+ String value() default "";
+ Class<?> type() default Label.class;
+ boolean redundant() default true;
+ Text text() default @Text;
+ Tag head() default @Tag();
+ Tag tail() default @Tag(value = "", kind = "");
+ }
+
+ /* Use identity cast expressions to nest TYPE_USE annotations. */
+ @Label(
+ (@Text({
+ (@Text({ "a", "aa", "aaa", "aaaa", }) String) "as",
+ (@Text({ "b", "bb", "bbb", "bbbb", }) String) "bs",
+ (@Text({ "c", "cc", "ccc", "cccc", }) String) "cs",
+ (@Text({ "d", "dd", "ddd", "dddd", }) String) "ds",
+ }) String) "abcd")
+ interface Primer { }
+
+ @Label @Label() @Label("""
+ n\
+ o\
+ O\
+ p""")
+ @Label(head = @Tag(value = "@Label"/*, kind = "name"*/))
+ @Label(// value = "Method",
+ type = Annotations$Tests.class,
+ redundant = !!!(1 != 1),
+ head = @Tag(value = "@Label"),
+ text = @Text({ "})", "({" }))
+ static void noOp(@Label @Label() @Label("dummy")
+ @Label(head = @Tag(/*value = "@Label",*/ kind = "name"))
+ @Label(// value = "Parameter",
+ type = Annotations$Tests.class,
+ head = @Tag(value = "@Label"),
+ text = @Text({ "){", "}(" }))
+ Object dummy)
+ {
+ }
+}
diff --git a/runtime/syntax/testdir/input/java_generics_signature.java b/runtime/syntax/testdir/input/java_generics_signature.java
new file mode 100644
index 0000000..505e70e
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_generics_signature.java
@@ -0,0 +1,140 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'style'
+// VIM_TEST_SETUP let g:java_highlight_signature = 1
+// VIM_TEST_SETUP let g:java_highlight_generics = 1
+// VIM_TEST_SETUP hi link javaGenericsC1 Todo
+// VIM_TEST_SETUP hi link javaGenericsC2 Error
+import java.math.BigInteger;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.LongFunction;
+import java.util.function.Predicate;
+
+class Generics$Tests<T extends Number & Comparable<? super T>, U>
+{ // JDK 21+.
+ static final Function<Function<Object, Object>, Object> PARTIAL =
+ Generics$Tests.y0();
+ static final Function<BigInteger, BigInteger> FACTORIAL_2000 =
+ Generics$Tests.<BigInteger, BigInteger>y1()
+ .apply(f -> x -> (x.compareTo(BigInteger.ONE) < 1)
+ ? BigInteger.ONE
+ : x.multiply(f.apply(x.subtract(BigInteger.ONE))));
+
+ static <T1> Y0<T1> y0()
+ {
+ return (Function<T1, T1> f) -> f.apply(
+ Generics$Tests.<T1>y0()
+ .apply(f));
+ }
+
+ static <T1, T2> Y1<T1, T2> y1()
+ {
+ return (Function<Function<T1, T2>, Function<T1, T2>> f) ->
+ (T1 x) -> f.apply(Generics$Tests.<T1, T2>y1()
+ .apply(f))
+ .apply(x);
+ }
+
+ static<T> void noOp(T dummy) { }
+
+ interface alpha<T> { }
+
+ interface Y0<T1> extends Function<Function<T1, T1>, T1> { }
+
+ interface Y1<T1, T2> extends Function<Function<Function<T1, T2>,
+ Function<T1, T2>>,
+ Function<T1, T2>> { }
+
+ interface Stackable<E> extends Iterable<E>
+ {
+ boolean isEmpty();
+ E peek();
+ E pop();
+ Stackable<E> popAll(Stackable<? super E> elements);
+ Stackable<E> popSome(Stackable<? super E> elements,
+ Predicate<? super E> filter);
+ Stackable<E> push(E element);
+ Stackable<E> pushAll(Iterable<? extends E> elements);
+ Stackable<E> pushSome(Iterable<? extends E> elements,
+ Predicate<? super E> filter);
+ Stackable<E> wind(Consumer<? super Stackable<E>> action);
+ }
+
+ sealed interface Num<N extends Number>
+ {
+ int radix();
+ N value();
+ }
+
+ record Bin<N extends Number>(N value) implements Num<N>
+ {
+ public int radix() { return 2; }
+ }
+
+ record Dec<N extends Number>(N value) implements Num<N>
+ {
+ public int radix() { return 10; }
+ }
+
+ record Hex<N extends Number>(N value) implements Num<N>
+ {
+ public int radix() { return 16; }
+ }
+
+ record Oct<N extends Number>(N value) implements Num<N>
+ {
+ public int radix() { return 8; }
+ }
+
+ static Num<Long> fromDecimal(long x, int radix)
+ {
+ record Pair(LongFunction<Num<Long>> a,
+ LongFunction<String> b) { }
+ final Pair p = switch (radix) {
+ case 2 -> new Pair(Bin::new, Long::toBinaryString);
+ case 8 -> new Pair(Oct::new, Long::toOctalString);
+ case 16 -> new Pair(Hex::new, Long::toHexString);
+ default -> new Pair(Dec::new,
+ y -> Long.toString(y));
+ };
+ return p.a().apply(Long.parseLong(p.b().apply(x), radix));
+ }
+
+ static long toDecimal(Num<Long> x)
+ {
+ return Long.parseLong(switch (x) {
+ case Bin<?>(Long b) -> Long.toBinaryString(b);
+ case Oct<?>(Long o) -> Long.toOctalString(o);
+ case Hex<?>(Long h) -> Long.toHexString(h);
+ default -> Long.toString(x.value());
+ }, x.radix());
+ }
+
+ @java.lang.annotation.Target(
+ java.lang.annotation.ElementType.TYPE_USE)
+ @interface Taggable
+ {
+ String value() default "";
+ }
+
+ {
+ int N = 0, X = 1, Y = 2;
+ Predicate<T> f = y->N<y.intValue();
+ Predicate<T> g = y->X<N&&(Integer)y>N;
+ boolean[] bb = {
+ X<N||N>Y, X < Y, X <Y, X <(Y), X<(Y), (X)<Y,
+ Double.isFinite(X<<Y),
+ X<=Y, X<(int)(byte)Y, X<~Y, X<-Y, X<+Y,
+ };
+ Class<?> klass = Generics$Tests.class;
+ Class< java.lang.Class<@Taggable("<>")int[][]> [] [] >
+ [ ] [ ] $ [ ] [ ];
+ if (false) { new Generics$Tests<>(); }
+ alpha<?> ao;
+ alpha<U> au;
+ alpha<alpha<U>> aau;
+ alpha<Y0<?>> ay0o;
+ alpha<Y0<U>> ay0u;
+ Y0<alpha<?>> y0ao;
+ Y0<alpha<U>> y0au;
+ }
+}
diff --git a/runtime/syntax/testdir/input/java_lambda_expressions_signature.java b/runtime/syntax/testdir/input/java_lambda_expressions_signature.java
new file mode 100644
index 0000000..16cf990
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_lambda_expressions_signature.java
@@ -0,0 +1,154 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'style'
+// VIM_TEST_SETUP let g:java_highlight_signature = 1
+
+import java.lang.annotation.ElementType;
+import java.util.function.BinaryOperator;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+class LambdaExpressions$Tests // JDK 21+.
+{
+ <I1, C1, C2, T1, T2, T3, Z1, Z2, Z3, S1, S2, S3> void test()
+ { // Schönfinkel's functions.
+ I<I1> i = x -> x;
+ C<C1, C2> c = x -> y -> x;
+ T<T1, T2, T3> t = f -> y -> x -> f.apply(x).apply(y);
+ Z<Z1, Z2, Z3> z = f -> g -> x -> f.apply(g.apply(x));
+ S<S1, S2, S3> s = f -> g -> x -> f.apply(x)
+ .apply(g.apply(x));
+
+ I<I1> i01 = (var x) -> x;
+ I<I1> i02 = (@Taggable var x) -> x;
+ I<I1> i03 = (@Taggable @Taggable var x) -> x;
+ I<I1> i04 = (final var x) -> x;
+ I<I1> i05 = (@Taggable final var x) -> x;
+ I<I1> i06 = (@Taggable @Taggable final var x) -> x;
+ I<I1> i07 = (I1 x) -> x;
+ I<I1> i08 = (@Taggable I1 x) -> x;
+ I<I1> i09 = (@Taggable @Taggable I1 x) -> x;
+ I<I1> i10 = (final I1 x) -> x;
+ I<I1> i11 = (@Taggable final I1 x) -> x;
+ I<I1> i12 = (@Taggable @Taggable final I1 x) -> x;
+
+ I<I1[]> ii01 = (I1... x) -> x;
+ I<I1[]> ii02 = (@Taggable I1... x) -> x;
+ I<I1[]> ii03 = (@Taggable @Taggable I1... x) -> x;
+ I<I1[]> ii04 = (final I1... x) -> x;
+ I<I1[]> ii05 = (@Taggable final I1... x) -> x;
+ I<I1[]> ii06 = (@Taggable @Taggable final I1... x) -> x;
+
+ BinaryOperator<I1> leftConst01 = (var x, var y) -> x;
+ BinaryOperator<I1> leftConst02 = (@Taggable var x,
+ @Taggable var y) -> x;
+ BinaryOperator<I1> leftConst03 = (@Taggable @Taggable var
+ x, @Taggable @Taggable var y) -> x;
+ BinaryOperator<I1> leftConst04 = (final var x,
+ final var y) -> x;
+ BinaryOperator<I1> leftConst05 = (@Taggable final
+ var x, @Taggable final var y) -> x;
+ BinaryOperator<I1> leftConst06 = (@Taggable
+ @Taggable final var x,
+ @Taggable
+ @Taggable final var y) -> x;
+ BinaryOperator<I1> leftConst07 = (I1 x, I1 y) -> x;
+ BinaryOperator<I1> leftConst08 = (@Taggable I1 x,
+ @Taggable I1 y) -> x;
+ BinaryOperator<I1> leftConst09 = (@Taggable @Taggable I1
+ x, @Taggable @Taggable I1 y) -> x;
+ BinaryOperator<I1> leftConst10 = (final I1 x,
+ final I1 y) -> x;
+ BinaryOperator<I1> leftConst11 = (@Taggable final
+ I1 x, @Taggable final I1 y) -> x;
+ BinaryOperator<I1> leftConst12 = (@Taggable
+ @Taggable final I1 x,
+ @Taggable
+ @Taggable final I1 y) -> x;
+
+ Runnable noOp = () -> {};
+ BinaryOperator<I1> leftConst = (x, y) -> x;
+ I<I1> id1 = (x) -> (x);
+ @SuppressWarnings("unchecked") I<I1> id2 =
+ ((I<I<I1>>) (I<?>) (Function<I1,
+ I1> x) -> x).apply(switch (0) {
+ case ((int) (byte) 1) -> (I1 x) -> x;
+ default -> (@Taggable I1 x) -> x; });
+ C<C1, C2> const1 = (x) -> (y) -> (x);
+ C<C1, C2> const2 = switch(switch ("") {
+ case "->"->"(s)->(s)";
+ default->"default"; }) {
+ case ("->")->(var x)->(var y)->(x);
+ default->(@Taggable var x)->(@Taggable var y)
+ ->(x);
+ };
+ }
+
+ @java.lang.annotation.Target(ElementType.PARAMETER)
+ @java.lang.annotation.Repeatable(Taggables.class)
+ @interface Taggable { String[] value() default ""; }
+
+ @java.lang.annotation.Target(ElementType.PARAMETER)
+ @interface Taggables { Taggable[] value(); }
+
+ interface I<A1> extends Function<A1, A1> { }
+ interface C<A1, A2> extends Function<A1, Function<A2, A1>> { }
+ interface T<A1, A2, A3> extends
+ Function<Function<A1, Function<A2, A3>>,
+ Function<A2,
+ Function<A1, A3>>> { }
+ interface Z<A1, A2, A3> extends Function<Function<A2, A3>,
+ Function<Function<A1, A2>,
+ Function<A1, A3>>> { }
+ interface S<A1, A2, A3> extends
+ Function<Function<A1, Function<A2, A3>>,
+ Function<Function<A1, A2>,
+ Function<A1, A3>>> { }
+
+ static void echo(Object o) { System.out.println(o); }
+
+ static {
+ enum Letters { OTHER, ALPHA, BETA }
+
+ Letters other = Letters.OTHER;
+
+ switch (other) {
+ case Letters alpha when Letters.ALPHA == alpha:
+ { echo(alpha); break; }
+ case Letters beta when Letters.BETA == beta:
+ { echo(beta); break; }
+ default: { echo(other); }
+ }
+
+ echo(switch (other) {
+ case Letters alpha when Letters.ALPHA == alpha
+ -> alpha;
+ case Letters beta when Letters.BETA == beta
+ -> beta;
+ default -> other;
+ });
+
+ switch (null) {
+ case String str when !"<empty>".equals(switch (str) {
+ case String str_ when
+ Predicate.<String>not(text ->
+ !text.isEmpty())
+ .test(str_)
+ -> "<empty>";
+ case String str_ -> str_;
+ }): { echo(str); break; }
+ case null: default: { echo("Other"); }
+ };
+
+ echo(switch (null) {
+ case String str when !"<empty>".equals(
+ switch (str) {
+ case String str_ when
+ Predicate.<String>not(text ->
+ !text.isEmpty())
+ .test(str_)
+ -> "<empty>";
+ case String str_ -> str_;
+ }) -> str;
+ case null, default -> "Other";
+ });
+ }
+}
diff --git a/runtime/syntax/testdir/input/java_methods_indent2.java b/runtime/syntax/testdir/input/java_methods_indent2.java
index 58a6900..3754cc4 100644
--- a/runtime/syntax/testdir/input/java_methods_indent2.java
+++ b/runtime/syntax/testdir/input/java_methods_indent2.java
@@ -84,9 +84,21 @@
enum E2
{
@SuppressWarnings("bespoke") A("a"),
- B("b"),
- C("c"), D("d"),
- E("e"), F("f"), G("g"), H("h");
+ B("b"
+ /*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/),
+ C("c", new Thread(
+
+ () -> {
+ })), D("d", (java.util.function.BooleanSupplier) () -> true),
+ E("e", new char[] { 'a', 'b', 'c', 'd' }), F("f", new Object() {
+ transient String name = "";
+ @Override public String toString() { return this.name; }
+ }), //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//
+ G("g"), @Deprecated H("h");
+
final String s;
private E2(String s) { this.s = s; }
+ private <δ> E2(String s, δ dummy) { this(s); }
+
+ @Override public String toString() { return name().toUpperCase(); }
}
diff --git a/runtime/syntax/testdir/input/java_methods_indent2_signature.java b/runtime/syntax/testdir/input/java_methods_indent2_signature.java
new file mode 100644
index 0000000..05e633b
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_methods_indent2_signature.java
@@ -0,0 +1,104 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'indent2'
+// VIM_TEST_SETUP let g:java_highlight_signature = 1
+// VIM_TEST_SETUP set encoding=utf-8 termencoding=utf-8
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+abstract class Indent2$MethodsTests
+{ // DO NOT retab! THIS FILE; REMEMBER ABOUT testdir/ftplugin.
+ // TYPES.
+ record Τʬ<α>(α a) { }
+
+ enum E
+ {
+ A("a"), B("b"), C("c"), D("d"),
+ E("e"), F("f"), G("g"), H("h");
+ final String s;
+ private E(String s) { this.s = s; }
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @java.lang.annotation.Repeatable(Tɐggablɘs.class)
+ @interface Tɐggablɘ
+ {
+ String[] value() default "";
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @interface Tɐggablɘs
+ {
+ Tɐggablɘ[] value();
+ }
+
+ interface Stylable<Α>
+ {
+ default void ascii$0_() { }
+ default Α μʭʭ$0_() { return null; }
+ }
+
+ // FIELDS.
+ private static final Class<?> CLASS_LOCK = classLock();
+
+ private final Object instanceLock = new Object();
+
+ // CONSTRUCTORS.
+ @Tɐggablɘ @Tɐggablɘ protected Indent2$MethodsTests() { }
+ <T extends Comparable<T>> Indent2$MethodsTests(T t, Void v) { }
+ private <T extends Comparable<T>> Indent2$MethodsTests(T t) { }
+
+ // METHODS.
+ @Tɐggablɘ @Tɐggablɘ abstract void ascii$0_(////////////////
+ );
+ @Tɐggablɘ @Tɐggablɘ abstract <α, β> Τʬ<α> μʭʭ$0_(
+ @SuppressWarnings("bespoke") β b);
+
+ @Tɐggablɘ private native void ascii$1_(/*////////////*/);
+ @Tɐggablɘ private native <α, β> Τʬ<α>[] μʭʭ$1_(
+ java.util.function.Function<β, Τʬ<α>[]> ƒ);
+
+ void Ascii$2_() { }
+ <T, U extends Stylable<T>> void Μʭʭ$2_(U u) { }
+
+ static final native synchronized void ascii$98_();
+ static final native synchronized <α, β> Τʬ<α>[][] μʭʭ$98_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ);
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp void ascii$99_()
+ { ascii$98_(); }
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp <α, β> Τʬ<α>[] μʭʭ$99_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ)
+ {
+ return
+ Indent2$MethodsTests.<α, β>μʭʭ$98_(ƒ)[0];
+ }
+
+ public static Class<?> classLock() { return Indent2$MethodsTests.class; }
+
+ @Override @SuppressWarnings("cast")
+ public String toString() { return (String) "Indent2$MethodsTests"; }
+}
+
+enum E2$
+{
+ @SuppressWarnings("bespoke") A("a"),
+ B("b"
+ /*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/),
+ C("c", new Thread(
+
+ () -> {
+ })), D("d", (java.util.function.BooleanSupplier) () -> true),
+ E("e", new char[] { 'a', 'b', 'c', 'd' }), F("f", new Object() {
+ transient String name = "";
+ @Override public String toString() { return this.name; }
+ }), //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//
+ G("g"), @Deprecated H("h");
+
+ final String s;
+ private E2$(String s) { this.s = s; }
+ private <δ> E2$(String s, δ dummy) { this(s); }
+
+ @Override public String toString() { return name().toUpperCase(); }
+}
diff --git a/runtime/syntax/testdir/input/java_methods_indent4.java b/runtime/syntax/testdir/input/java_methods_indent4.java
index 972cdf3..8fc05c0 100644
--- a/runtime/syntax/testdir/input/java_methods_indent4.java
+++ b/runtime/syntax/testdir/input/java_methods_indent4.java
@@ -84,9 +84,21 @@
enum E4
{
@SuppressWarnings("bespoke") A("a"),
- B("b"),
- C("c"), D("d"),
- E("e"), F("f"), G("g"), H("h");
+ B("b"
+ /*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/),
+ C("c", new Thread(
+
+ () -> {
+ })), D("d", (java.util.function.BooleanSupplier) () -> true),
+ E("e", new char[] { 'a', 'b', 'c', 'd' }), F("f", new Object() {
+ transient String name = "";
+ @Override public String toString() { return this.name; }
+ }), //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//
+ G("g"), @Deprecated H("h");
+
final String s;
private E4(String s) { this.s = s; }
+ private <δ> E4(String s, δ dummy) { this(s); }
+
+ @Override public String toString() { return name().toUpperCase(); }
}
diff --git a/runtime/syntax/testdir/input/java_methods_indent4_signature.java b/runtime/syntax/testdir/input/java_methods_indent4_signature.java
new file mode 100644
index 0000000..f21d95d
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_methods_indent4_signature.java
@@ -0,0 +1,104 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'indent4'
+// VIM_TEST_SETUP let g:java_highlight_signature = 1
+// VIM_TEST_SETUP set encoding=utf-8 termencoding=utf-8
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+abstract class Indent4$MethodsTests
+{ // DO NOT retab! THIS FILE; REMEMBER ABOUT testdir/ftplugin.
+ // TYPES.
+ record Τʬ<α>(α a) { }
+
+ enum E
+ {
+ A("a"), B("b"), C("c"), D("d"),
+ E("e"), F("f"), G("g"), H("h");
+ final String s;
+ private E(String s) { this.s = s; }
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @java.lang.annotation.Repeatable(Tɐggablɘs.class)
+ @interface Tɐggablɘ
+ {
+ String[] value() default "";
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @interface Tɐggablɘs
+ {
+ Tɐggablɘ[] value();
+ }
+
+ interface Stylable<Α>
+ {
+ default void ascii$0_() { }
+ default Α μʭʭ$0_() { return null; }
+ }
+
+ // FIELDS.
+ private static final Class<?> CLASS_LOCK = classLock();
+
+ private final Object instanceLock = new Object();
+
+ // CONSTRUCTORS.
+ @Tɐggablɘ @Tɐggablɘ protected Indent4$MethodsTests() { }
+ <T extends Comparable<T>> Indent4$MethodsTests(T t, Void v) { }
+ private <T extends Comparable<T>> Indent4$MethodsTests(T t) { }
+
+ // METHODS.
+ @Tɐggablɘ @Tɐggablɘ abstract void ascii$0_(////////////////
+ );
+ @Tɐggablɘ @Tɐggablɘ abstract <α, β> Τʬ<α> μʭʭ$0_(
+ @SuppressWarnings("bespoke") β b);
+
+ @Tɐggablɘ private native void ascii$1_(/*////////////*/);
+ @Tɐggablɘ private native <α, β> Τʬ<α>[] μʭʭ$1_(
+ java.util.function.Function<β, Τʬ<α>[]> ƒ);
+
+ void Ascii$2_() { }
+ <T, U extends Stylable<T>> void Μʭʭ$2_(U u) { }
+
+ static final native synchronized void ascii$98_();
+ static final native synchronized <α, β> Τʬ<α>[][] μʭʭ$98_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ);
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp void ascii$99_()
+ { ascii$98_(); }
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp <α, β> Τʬ<α>[] μʭʭ$99_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ)
+ {
+ return
+ Indent4$MethodsTests.<α, β>μʭʭ$98_(ƒ)[0];
+ }
+
+ public static Class<?> classLock() { return Indent4$MethodsTests.class; }
+
+ @Override @SuppressWarnings("cast")
+ public String toString() { return (String) "Indent4$MethodsTests"; }
+}
+
+enum E4$
+{
+ @SuppressWarnings("bespoke") A("a"),
+ B("b"
+ /*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/),
+ C("c", new Thread(
+
+ () -> {
+ })), D("d", (java.util.function.BooleanSupplier) () -> true),
+ E("e", new char[] { 'a', 'b', 'c', 'd' }), F("f", new Object() {
+ transient String name = "";
+ @Override public String toString() { return this.name; }
+ }), //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//
+ G("g"), @Deprecated H("h");
+
+ final String s;
+ private E4$(String s) { this.s = s; }
+ private <δ> E4$(String s, δ dummy) { this(s); }
+
+ @Override public String toString() { return name().toUpperCase(); }
+}
diff --git a/runtime/syntax/testdir/input/java_methods_indent8.java b/runtime/syntax/testdir/input/java_methods_indent8.java
index 40fd26b..d27830c 100644
--- a/runtime/syntax/testdir/input/java_methods_indent8.java
+++ b/runtime/syntax/testdir/input/java_methods_indent8.java
@@ -84,9 +84,21 @@
enum E8
{
@SuppressWarnings("bespoke") A("a"),
- B("b"),
- C("c"), D("d"),
- E("e"), F("f"), G("g"), H("h");
+ B("b"
+ /*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/),
+ C("c", new Thread(
+
+ () -> {
+ })), D("d", (java.util.function.BooleanSupplier) () -> true),
+ E("e", new char[] { 'a', 'b', 'c', 'd' }), F("f", new Object() {
+ transient String name = "";
+ @Override public String toString() { return this.name; }
+ }), //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//
+ G("g"), @Deprecated H("h");
+
final String s;
private E8(String s) { this.s = s; }
+ private <δ> E8(String s, δ dummy) { this(s); }
+
+ @Override public String toString() { return name().toUpperCase(); }
}
diff --git a/runtime/syntax/testdir/input/java_methods_indent8_signature.java b/runtime/syntax/testdir/input/java_methods_indent8_signature.java
new file mode 100644
index 0000000..8d82196
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_methods_indent8_signature.java
@@ -0,0 +1,104 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'indent8'
+// VIM_TEST_SETUP let g:java_highlight_signature = 1
+// VIM_TEST_SETUP set encoding=utf-8 termencoding=utf-8
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+abstract class Indent8$MethodsTests
+{ // DO NOT retab! THIS FILE; REMEMBER ABOUT testdir/ftplugin.
+ // TYPES.
+ record Τʬ<α>(α a) { }
+
+ enum E
+ {
+ A("a"), B("b"), C("c"), D("d"),
+ E("e"), F("f"), G("g"), H("h");
+ final String s;
+ private E(String s) { this.s = s; }
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @java.lang.annotation.Repeatable(Tɐggablɘs.class)
+ @interface Tɐggablɘ
+ {
+ String[] value() default "";
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @interface Tɐggablɘs
+ {
+ Tɐggablɘ[] value();
+ }
+
+ interface Stylable<Α>
+ {
+ default void ascii$0_() { }
+ default Α μʭʭ$0_() { return null; }
+ }
+
+ // FIELDS.
+ private static final Class<?> CLASS_LOCK = classLock();
+
+ private final Object instanceLock = new Object();
+
+ // CONSTRUCTORS.
+ @Tɐggablɘ @Tɐggablɘ protected Indent8$MethodsTests() { }
+ <T extends Comparable<T>> Indent8$MethodsTests(T t, Void v) { }
+ private <T extends Comparable<T>> Indent8$MethodsTests(T t) { }
+
+ // METHODS.
+ @Tɐggablɘ @Tɐggablɘ abstract void ascii$0_(////////////////
+ );
+ @Tɐggablɘ @Tɐggablɘ abstract <α, β> Τʬ<α> μʭʭ$0_(
+ @SuppressWarnings("bespoke") β b);
+
+ @Tɐggablɘ private native void ascii$1_(/*////////////*/);
+ @Tɐggablɘ private native <α, β> Τʬ<α>[] μʭʭ$1_(
+ java.util.function.Function<β, Τʬ<α>[]> ƒ);
+
+ void Ascii$2_() { }
+ <T, U extends Stylable<T>> void Μʭʭ$2_(U u) { }
+
+ static final native synchronized void ascii$98_();
+ static final native synchronized <α, β> Τʬ<α>[][] μʭʭ$98_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ);
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp void ascii$99_()
+ { ascii$98_(); }
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp <α, β> Τʬ<α>[] μʭʭ$99_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ)
+ {
+ return
+ Indent8$MethodsTests.<α, β>μʭʭ$98_(ƒ)[0];
+ }
+
+ public static Class<?> classLock() { return Indent8$MethodsTests.class; }
+
+ @Override @SuppressWarnings("cast")
+ public String toString() { return (String) "Indent8$MethodsTests"; }
+}
+
+enum E8$
+{
+ @SuppressWarnings("bespoke") A("a"),
+ B("b"
+ /*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\*/),
+ C("c", new Thread(
+
+ () -> {
+ })), D("d", (java.util.function.BooleanSupplier) () -> true),
+ E("e", new char[] { 'a', 'b', 'c', 'd' }), F("f", new Object() {
+ transient String name = "";
+ @Override public String toString() { return this.name; }
+ }), //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//
+ G("g"), @Deprecated H("h");
+
+ final String s;
+ private E8$(String s) { this.s = s; }
+ private <δ> E8$(String s, δ dummy) { this(s); }
+
+ @Override public String toString() { return name().toUpperCase(); }
+}
diff --git a/runtime/syntax/testdir/input/java_methods_style_signature.java b/runtime/syntax/testdir/input/java_methods_style_signature.java
new file mode 100644
index 0000000..8e3b4d6
--- /dev/null
+++ b/runtime/syntax/testdir/input/java_methods_style_signature.java
@@ -0,0 +1,82 @@
+// VIM_TEST_SETUP let g:java_highlight_functions = 'style'
+// VIM_TEST_SETUP let g:java_highlight_signature = 1
+// VIM_TEST_SETUP set encoding=utf-8 termencoding=utf-8
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+abstract class Style$MethodsTests
+{
+ // TYPES.
+ record Τʬ<α>(α a) { }
+
+ enum E
+ {
+ A("a"), B("b"), C("c"), D("d"),
+ E("e"), F("f"), G("g"), H("h");
+ final String s;
+ private E(String s) { this.s = s; }
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @java.lang.annotation.Repeatable(Tɐggablɘs.class)
+ @interface Tɐggablɘ
+ {
+ String[] value() default "";
+ }
+
+ @Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+ @interface Tɐggablɘs
+ {
+ Tɐggablɘ[] value();
+ }
+
+ interface Stylable<Α>
+ {
+ default void ascii$0_() { }
+ default Α μʭʭ$0_() { return null; }
+ }
+
+ // FIELDS.
+ private static final Class<?> CLASS_LOCK = classLock();
+
+ private final Object instanceLock = new Object();
+
+ // CONSTRUCTORS.
+ @Tɐggablɘ @Tɐggablɘ protected Style$MethodsTests() { }
+ <T extends Comparable<T>> Style$MethodsTests(T t, Void v) { }
+ private <T extends Comparable<T>> Style$MethodsTests(T t) { }
+
+ // METHODS.
+ @Tɐggablɘ @Tɐggablɘ abstract void ascii$0_(////////////////
+ );
+ @Tɐggablɘ @Tɐggablɘ abstract <α, β> Τʬ<α> μʭʭ$0_(
+ @SuppressWarnings("bespoke") β b);
+
+ @Tɐggablɘ private native void ascii$1_(/*////////////*/);
+ @Tɐggablɘ private native <α, β> Τʬ<α>[] μʭʭ$1_(
+ java.util.function.Function<β, Τʬ<α>[]> ƒ);
+
+ void Ascii$2_() { }
+ <T, U extends Stylable<T>> void Μʭʭ$2_(U u) { }
+
+ static final native synchronized void ascii$98_();
+ static final native synchronized <α, β> Τʬ<α>[][] μʭʭ$98_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ);
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp void ascii$99_()
+ { ascii$98_(); }
+
+ @SuppressWarnings("strictfp")
+ protected static final synchronized strictfp <α, β> Τʬ<α>[] μʭʭ$99_(
+ java.util.function.Function<β, Τʬ<α>[][]> ƒ)
+ {
+ return
+ Style$MethodsTests.<α, β>μʭʭ$98_(ƒ)[0];
+ }
+
+ public static Class<?> classLock() { return Style$MethodsTests.class; }
+
+ @Override @SuppressWarnings("cast")
+ public String toString() { return (String) "Style$MethodsTests"; }
+}