userdiff: support Java sealed classes
commit93d52ed050f5613897b73e75961df5c589d63a4b
authorAndrei Rybak <rybak.a.v@gmail.com>
Tue, 7 Feb 2023 23:42:59 +0000 (8 00:42 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 8 Feb 2023 20:57:13 +0000 (8 12:57 -0800)
treebf4f49280425d0bdb9120b110c55a18132901655
parent575e6fcfcc961a64a222e0241cdc117d24f9ec87
userdiff: support Java sealed classes

A new kind of class was added in Java 17 -- sealed classes.[1]  This
feature includes several new keywords that may appear in a declaration
of a class.  New modifiers before name of the class: "sealed" and
"non-sealed", and a clause after name of the class marked by keyword
"permits".

The current set of regular expressions in userdiff.c already allows the
modifier "sealed" and the "permits" clause, but not the modifier
"non-sealed", which is the first hyphenated keyword in Java.[2]  Allow
hyphen in the words that precede the name of type to match the
"non-sealed" modifier.

In new input file "java-sealed" for the test t4018-diff-funcname.sh, use
a Java code comment for the marker "RIGHT".  This workaround is needed,
because the name of the sealed class appears on the line of code that
has the "ChangeMe" marker.

[1] Detailed description in "JEP 409: Sealed Classes"
    https://openjdk.org/jeps/409
[2] "JEP draft: Keyword Management for the Java Language"
    https://openjdk.org/jeps/8223002

Signed-off-by: Andrei Rybak <rybak.a.v@gmail.com>
Reviewed-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t4018/java-non-sealed [new file with mode: 0644]
t/t4018/java-sealed [new file with mode: 0644]
t/t4018/java-sealed-permits [new file with mode: 0644]
t/t4018/java-sealed-type-parameters [new file with mode: 0644]
t/t4018/java-sealed-type-parameters-implements-permits [new file with mode: 0644]
t/t4018/java-sealed-type-parameters-permits [new file with mode: 0644]
userdiff.c