Skip to content

Commit 9ecdf0b

Browse files
committed
fix bug in QDox reader so that it now recoqnises vararg signatures.
1 parent cfc64b8 commit 9ecdf0b

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

hamcrest-generator/src/main/java/org/hamcrest/generator/QDoxFactoryReader.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,16 @@ private JavaMethod findMethodInSource(FactoryMethod factoryMethod) {
8080
// This seems to cover most cases though.
8181
List<FactoryMethod.Parameter> params = factoryMethod.getParameters();
8282
Type[] types = new Type[params.size()];
83+
boolean varArgs = false;
8384
for (int i = 0; i < types.length; i++) {
84-
// QDox ignores varargs and generics, so we strip them out to help QDox.
8585
String type = params.get(i).getType();
86+
varArgs = VARARGS_REGEX.matcher(type).find();
87+
// QDox ignores varargs and generics, so we strip them out to help QDox.
8688
type = GENERIC_REGEX.matcher(type).replaceAll("");
8789
type = VARARGS_REGEX.matcher(type).replaceAll("");
8890
types[i] = new Type(type);
8991
}
90-
JavaMethod[] methods = classSource.getMethodsBySignature(factoryMethod.getName(), types, false);
92+
JavaMethod[] methods = classSource.getMethodsBySignature(factoryMethod.getName(), types, false, varArgs);
9193
return methods.length == 1 ? methods[0] : null;
9294
}
9395

hamcrest-unit-test/src/main/java/org/hamcrest/generator/QDoxFactoryReaderTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,36 @@ public void testExtractsOriginalParameterNamesFromSource() {
2323
assertEquals("java.lang.String", factoryMethod.getParameters().get(0).getType());
2424
assertEquals("realParamName", factoryMethod.getParameters().get(0).getName());
2525
}
26+
27+
public void testExtractsOriginalGenericParameterNamesFromSource() {
28+
FactoryMethod method = new FactoryMethod("org.SomeClass", "someMethod", "unusedReturnType");
29+
method.addParameter("java.util.Collection<java.lang.String>", "badParamName");
30+
31+
String input = "" +
32+
"package org;\n" +
33+
"class SomeClass {\n" +
34+
" Matcher someMethod(java.util.Collection<String> realParamName) { ... } \n" +
35+
"}\n";
36+
FactoryMethod factoryMethod = wrapUsingQDoxedSource(method, "org.SomeClass", input);
37+
38+
assertEquals("java.util.Collection<java.lang.String>", factoryMethod.getParameters().get(0).getType());
39+
assertEquals("realParamName", factoryMethod.getParameters().get(0).getName());
40+
}
41+
42+
public void testExtractsOriginalVarArgParameterNamesFromSource() {
43+
FactoryMethod method = new FactoryMethod("org.SomeClass", "someMethod", "unusedReturnType");
44+
method.addParameter("java.lang.String...", "badParamName");
45+
46+
String input = "" +
47+
"package org;\n" +
48+
"class SomeClass {\n" +
49+
" Matcher someMethod(java.lang.String... realParamName) { ... } \n" +
50+
"}\n";
51+
FactoryMethod factoryMethod = wrapUsingQDoxedSource(method, "org.SomeClass", input);
52+
53+
assertEquals("java.lang.String...", factoryMethod.getParameters().get(0).getType());
54+
assertEquals("realParamName", factoryMethod.getParameters().get(0).getName());
55+
}
2656

2757
public void testExtractsOriginalJavaDocFromSource() {
2858
FactoryMethod method = new FactoryMethod("org.SomeClass", "someMethod", "unusedReturnType");

0 commit comments

Comments
 (0)