Skip to content

Commit d2d9bac

Browse files
committed
Fallback for generic param names
1 parent cb9e973 commit d2d9bac

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

src/main/java/org/apache/ibatis/reflection/ParamNameResolver.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,21 @@ public Object getNamedParams(Object[] args) {
181181

182182
public Type getType(String name) {
183183
PropertyTokenizer propertyTokenizer = new PropertyTokenizer(name);
184-
Type type = typeMap.get(propertyTokenizer.getName());
184+
String unindexed = propertyTokenizer.getName();
185+
Type type = typeMap.get(unindexed);
186+
187+
if (type == null && unindexed.startsWith(GENERIC_NAME_PREFIX)) {
188+
try {
189+
Integer paramIndex = Integer.valueOf(unindexed.substring(GENERIC_NAME_PREFIX.length())) - 1;
190+
unindexed = names.get(paramIndex);
191+
if (unindexed != null) {
192+
type = typeMap.get(unindexed);
193+
}
194+
} catch (NumberFormatException e) {
195+
// user mistake
196+
}
197+
}
198+
185199
if (propertyTokenizer.getIndex() != null) {
186200
if (type instanceof ParameterizedType) {
187201
Type[] typeArgs = ((ParameterizedType) type).getActualTypeArguments();
@@ -190,7 +204,6 @@ public Type getType(String name) {
190204
return ((Class<?>) type).getComponentType();
191205
}
192206
}
193-
// TODO: param1, param2
194207
return type;
195208
}
196209

src/test/java/org/apache/ibatis/reflection/ParamNameResolverTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ void testGetTypeSimple() throws Exception {
4141
Method method = clazz.getDeclaredMethod("m1", Integer.class);
4242
ParamNameResolver resolver = new ParamNameResolver(new Configuration(), method, clazz);
4343
assertEquals(Integer.class, resolver.getType("p"));
44+
assertEquals(Integer.class, resolver.getType("param1"));
4445
}
4546

4647
@Test
@@ -50,6 +51,7 @@ void testGetTypeList() throws Exception {
5051
ParamNameResolver resolver = new ParamNameResolver(new Configuration(), method, clazz);
5152
assertEquals(List.class, ((ParameterizedType) resolver.getType("p")).getRawType());
5253
assertEquals(String.class, resolver.getType("p[0]"));
54+
assertEquals(String.class, resolver.getType("param1[0]"));
5355
}
5456

5557
@Test
@@ -59,5 +61,7 @@ void testGetTypeArray() throws Exception {
5961
ParamNameResolver resolver = new ParamNameResolver(new Configuration(), method, clazz);
6062
assertEquals(Integer[].class, resolver.getType("p"));
6163
assertEquals(Integer.class, resolver.getType("p[0]"));
64+
assertEquals(Integer[].class, resolver.getType("param1"));
65+
assertEquals(Integer.class, resolver.getType("param1[0]"));
6266
}
6367
}

0 commit comments

Comments
 (0)