Skip to content

Commit 73e592a

Browse files
committed
Merge pull request mybatis#352 from kazuki-ma/GenericTypeHandler
Make ResultHandler and ResultContext to generic type.
2 parents 30ee6ac + c3848b2 commit 73e592a

File tree

7 files changed

+28
-28
lines changed

7 files changed

+28
-28
lines changed

src/main/java/org/apache/ibatis/executor/result/DefaultMapResultHandler.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
/**
2727
* @author Clinton Begin
2828
*/
29-
public class DefaultMapResultHandler<K, V> implements ResultHandler {
29+
public class DefaultMapResultHandler<K, V> implements ResultHandler<V> {
3030

3131
private final Map<K, V> mappedResults;
3232
private final String mapKey;
@@ -42,9 +42,8 @@ public DefaultMapResultHandler(String mapKey, ObjectFactory objectFactory, Objec
4242
}
4343

4444
@Override
45-
public void handleResult(ResultContext context) {
46-
// TODO is that assignment always true?
47-
final V value = (V) context.getResultObject();
45+
public void handleResult(ResultContext<? extends V> context) {
46+
final V value = context.getResultObject();
4847
final MetaObject mo = MetaObject.forObject(value, objectFactory, objectWrapperFactory);
4948
// TODO is that assignment always true?
5049
final K key = (K) mo.getValue(mapKey);

src/main/java/org/apache/ibatis/executor/result/DefaultResultContext.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
/**
2121
* @author Clinton Begin
2222
*/
23-
public class DefaultResultContext implements ResultContext {
23+
public class DefaultResultContext<T> implements ResultContext<T> {
2424

25-
private Object resultObject;
25+
private T resultObject;
2626
private int resultCount;
2727
private boolean stopped;
2828

@@ -33,7 +33,7 @@ public DefaultResultContext() {
3333
}
3434

3535
@Override
36-
public Object getResultObject() {
36+
public T getResultObject() {
3737
return resultObject;
3838
}
3939

@@ -47,7 +47,7 @@ public boolean isStopped() {
4747
return stopped;
4848
}
4949

50-
public void nextResultObject(Object resultObject) {
50+
public void nextResultObject(T resultObject) {
5151
resultCount++;
5252
this.resultObject = resultObject;
5353
}

src/main/java/org/apache/ibatis/executor/result/DefaultResultHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
/**
2626
* @author Clinton Begin
2727
*/
28-
public class DefaultResultHandler implements ResultHandler {
28+
public class DefaultResultHandler implements ResultHandler<Object> {
2929

3030
private final List<Object> list;
3131

@@ -39,7 +39,7 @@ public DefaultResultHandler(ObjectFactory objectFactory) {
3939
}
4040

4141
@Override
42-
public void handleResult(ResultContext context) {
42+
public void handleResult(ResultContext<? extends Object> context) {
4343
list.add(context.getResultObject());
4444
}
4545

src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public class DefaultResultSetHandler implements ResultSetHandler {
6868
private final MappedStatement mappedStatement;
6969
private final RowBounds rowBounds;
7070
private final ParameterHandler parameterHandler;
71-
private final ResultHandler resultHandler;
71+
private final ResultHandler<?> resultHandler;
7272
private final BoundSql boundSql;
7373
private final TypeHandlerRegistry typeHandlerRegistry;
7474
private final ObjectFactory objectFactory;
@@ -87,7 +87,7 @@ private static class PendingRelation {
8787
public ResultMapping propertyMapping;
8888
}
8989

90-
public DefaultResultSetHandler(Executor executor, MappedStatement mappedStatement, ParameterHandler parameterHandler, ResultHandler resultHandler, BoundSql boundSql,
90+
public DefaultResultSetHandler(Executor executor, MappedStatement mappedStatement, ParameterHandler parameterHandler, ResultHandler<?> resultHandler, BoundSql boundSql,
9191
RowBounds rowBounds) {
9292
this.executor = executor;
9393
this.configuration = mappedStatement.getConfiguration();
@@ -260,7 +260,7 @@ private List<Object> collapseSingleResultList(List<Object> multipleResults) {
260260
// HANDLE ROWS FOR SIMPLE RESULTMAP
261261
//
262262

263-
private void handleRowValues(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler resultHandler, RowBounds rowBounds, ResultMapping parentMapping) throws SQLException {
263+
private void handleRowValues(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler<?> resultHandler, RowBounds rowBounds, ResultMapping parentMapping) throws SQLException {
264264
if (resultMap.hasNestedResultMaps()) {
265265
ensureNoRowBounds();
266266
checkResultHandler();
@@ -285,9 +285,9 @@ protected void checkResultHandler() {
285285
}
286286
}
287287

288-
private void handleRowValuesForSimpleResultMap(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler resultHandler, RowBounds rowBounds, ResultMapping parentMapping)
288+
private void handleRowValuesForSimpleResultMap(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler<?> resultHandler, RowBounds rowBounds, ResultMapping parentMapping)
289289
throws SQLException {
290-
DefaultResultContext resultContext = new DefaultResultContext();
290+
DefaultResultContext<Object> resultContext = new DefaultResultContext<Object>();
291291
skipRows(rsw.getResultSet(), rowBounds);
292292
while (shouldProcessMoreRows(resultContext, rowBounds) && rsw.getResultSet().next()) {
293293
ResultMap discriminatedResultMap = resolveDiscriminatedResultMap(rsw.getResultSet(), resultMap, null);
@@ -296,20 +296,21 @@ private void handleRowValuesForSimpleResultMap(ResultSetWrapper rsw, ResultMap r
296296
}
297297
}
298298

299-
private void storeObject(ResultHandler resultHandler, DefaultResultContext resultContext, Object rowValue, ResultMapping parentMapping, ResultSet rs) throws SQLException {
299+
private void storeObject(ResultHandler<?> resultHandler, DefaultResultContext<Object> resultContext, Object rowValue, ResultMapping parentMapping, ResultSet rs) throws SQLException {
300300
if (parentMapping != null) {
301301
linkToParents(rs, parentMapping, rowValue);
302302
} else {
303303
callResultHandler(resultHandler, resultContext, rowValue);
304304
}
305305
}
306306

307-
private void callResultHandler(ResultHandler resultHandler, DefaultResultContext resultContext, Object rowValue) {
307+
@SuppressWarnings("unchecked" /* because ResultHandler<?> is always ResultHandler<Object>*/)
308+
private void callResultHandler(ResultHandler<?> resultHandler, DefaultResultContext<Object> resultContext, Object rowValue) {
308309
resultContext.nextResultObject(rowValue);
309-
resultHandler.handleResult(resultContext);
310+
((ResultHandler<Object>)resultHandler).handleResult(resultContext);
310311
}
311312

312-
private boolean shouldProcessMoreRows(ResultContext context, RowBounds rowBounds) throws SQLException {
313+
private boolean shouldProcessMoreRows(ResultContext<?> context, RowBounds rowBounds) throws SQLException {
313314
return !context.isStopped() && context.getResultCount() < rowBounds.getLimit();
314315
}
315316

@@ -758,8 +759,8 @@ private String prependPrefix(String columnName, String prefix) {
758759
// HANDLE NESTED RESULT MAPS
759760
//
760761

761-
private void handleRowValuesForNestedResultMap(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler resultHandler, RowBounds rowBounds, ResultMapping parentMapping) throws SQLException {
762-
final DefaultResultContext resultContext = new DefaultResultContext();
762+
private void handleRowValuesForNestedResultMap(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler<?> resultHandler, RowBounds rowBounds, ResultMapping parentMapping) throws SQLException {
763+
final DefaultResultContext<Object> resultContext = new DefaultResultContext<Object>();
763764
skipRows(rsw.getResultSet(), rowBounds);
764765
Object rowValue = null;
765766
while (shouldProcessMoreRows(resultContext, rowBounds) && rsw.getResultSet().next()) {

src/main/java/org/apache/ibatis/session/ResultContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
/**
1919
* @author Clinton Begin
2020
*/
21-
public interface ResultContext {
21+
public interface ResultContext<T> {
2222

23-
Object getResultObject();
23+
T getResultObject();
2424

2525
int getResultCount();
2626

src/main/java/org/apache/ibatis/session/ResultHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
/**
1919
* @author Clinton Begin
2020
*/
21-
public interface ResultHandler {
21+
public interface ResultHandler<T> {
2222

23-
void handleResult(ResultContext context);
23+
void handleResult(ResultContext<? extends T> resultContext);
2424

2525
}

src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,11 @@ public <K, V> Map<K, V> selectMap(String statement, Object parameter, String map
9292

9393
@Override
9494
public <K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey, RowBounds rowBounds) {
95-
final List<?> list = selectList(statement, parameter, rowBounds);
95+
final List<? extends V> list = selectList(statement, parameter, rowBounds);
9696
final DefaultMapResultHandler<K, V> mapResultHandler = new DefaultMapResultHandler<K, V>(mapKey,
9797
configuration.getObjectFactory(), configuration.getObjectWrapperFactory());
98-
final DefaultResultContext context = new DefaultResultContext();
99-
for (Object o : list) {
98+
final DefaultResultContext<V> context = new DefaultResultContext<V>();
99+
for (V o : list) {
100100
context.nextResultObject(o);
101101
mapResultHandler.handleResult(context);
102102
}

0 commit comments

Comments
 (0)