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>
This commit is contained in:

committed by
Junio C Hamano

parent
2d755dfac9
commit
a8cbc89589
@ -3,6 +3,10 @@ public class Beer
|
|||||||
int special;
|
int special;
|
||||||
public static void main(String RIGHT[])
|
public static void main(String RIGHT[])
|
||||||
{
|
{
|
||||||
|
someMethodCall();
|
||||||
|
someOtherMethod("17")
|
||||||
|
.doThat();
|
||||||
|
// Whatever
|
||||||
System.out.print("ChangeMe");
|
System.out.print("ChangeMe");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
6
t/t4018/java-enum-constant
Normal file
6
t/t4018/java-enum-constant
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
private enum RIGHT {
|
||||||
|
ONE,
|
||||||
|
TWO,
|
||||||
|
THREE,
|
||||||
|
ChangeMe
|
||||||
|
}
|
9
t/t4018/java-method-return-generic-bounded
Normal file
9
t/t4018/java-method-return-generic-bounded
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
class MyExample {
|
||||||
|
public <T extends Bar & Foo<T>, R> Map<T, R[]> foo(String[] RIGHT) {
|
||||||
|
someMethodCall();
|
||||||
|
someOtherMethod()
|
||||||
|
.doThat();
|
||||||
|
// Whatever...
|
||||||
|
return (List<T>) Arrays.asList("ChangeMe");
|
||||||
|
}
|
||||||
|
}
|
9
t/t4018/java-method-return-generic-wildcard
Normal file
9
t/t4018/java-method-return-generic-wildcard
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
class MyExample {
|
||||||
|
public List<? extends Comparable> foo(String[] RIGHT) {
|
||||||
|
someMethodCall();
|
||||||
|
someOtherMethod()
|
||||||
|
.doThat();
|
||||||
|
// Whatever...
|
||||||
|
return Arrays.asList("ChangeMe");
|
||||||
|
}
|
||||||
|
}
|
6
t/t4018/java-nested-field
Normal file
6
t/t4018/java-nested-field
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
class MyExample {
|
||||||
|
private static class RIGHT {
|
||||||
|
// change an inner class field
|
||||||
|
String inner = "ChangeMe";
|
||||||
|
}
|
||||||
|
}
|
@ -142,7 +142,11 @@ PATTERNS("html",
|
|||||||
"[^<>= \t]+"),
|
"[^<>= \t]+"),
|
||||||
PATTERNS("java",
|
PATTERNS("java",
|
||||||
"!^[ \t]*(catch|do|for|if|instanceof|new|return|switch|throw|while)\n"
|
"!^[ \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_]*"
|
"[a-zA-Z_][a-zA-Z0-9_]*"
|
||||||
"|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
|
"|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
|
||||||
|
Reference in New Issue
Block a user