diff options
author | Tassilo Horn <tsdh@gnu.org> | 2021-08-11 19:51:04 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-08-11 20:11:30 +0200 |
commit | a8cbc895893f4c244e54374d3bf937819fb6e2e9 (patch) | |
tree | bd64b7138c041098729e792130e4a7a9cb620ac0 /userdiff.c | |
parent | Git 2.33-rc1 (diff) | |
download | git-a8cbc895893f4c244e54374d3bf937819fb6e2e9.tar.xz git-a8cbc895893f4c244e54374d3bf937819fb6e2e9.zip |
userdiff: improve java hunk header regex
Currently, the git diff hunk headers show the wrong method signature if the
method has a qualified return type, an array return type, or a generic return
type because the regex doesn't allow dots (.), [], or < and > in the return
type. Also, type parameter declarations couldn't be matched.
Add several t4018 tests asserting the right hunk headers for different cases:
- enum constant change
- change in generic method with bounded type parameters
- change in generic method with wildcard
- field change in a nested class
Signed-off-by: Tassilo Horn <tsdh@gnu.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'userdiff.c')
-rw-r--r-- | userdiff.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/userdiff.c b/userdiff.c index d9b2ba752f..af1f1c2a12 100644 --- a/userdiff.c +++ b/userdiff.c @@ -142,7 +142,11 @@ PATTERNS("html", "[^<>= \t]+"), PATTERNS("java", "!^[ \t]*(catch|do|for|if|instanceof|new|return|switch|throw|while)\n" - "^[ \t]*(([A-Za-z_][A-Za-z_0-9]*[ \t]+)+[A-Za-z_][A-Za-z_0-9]*[ \t]*\\([^;]*)$", + /* Class, enum, and interface declarations */ + "^[ \t]*(([a-z]+[ \t]+)*(class|enum|interface)[ \t]+[A-Za-z][A-Za-z0-9_$]*[ \t]+.*)$\n" + /* Method definitions; note that constructor signatures are not */ + /* matched because they are indistinguishable from method calls. */ + "^[ \t]*(([A-Za-z_<>&][][?&<>.,A-Za-z_0-9]*[ \t]+)+[A-Za-z_][A-Za-z_0-9]*[ \t]*\\([^;]*)$", /* -- */ "[a-zA-Z_][a-zA-Z0-9_]*" "|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?" |