fixed stack overflow bug

This commit is contained in:
Keith Donald
2008-07-14 23:08:53 +00:00
parent 8352323695
commit 46db6e9dc5
2 changed files with 12 additions and 16 deletions

View File

@@ -171,7 +171,7 @@ public class GenericConversionService implements ConversionService {
if (converter != null) {
return converter;
}
Class[] interfaces = targetClass.getInterfaces();
Class[] interfaces = currentClass.getInterfaces();
for (int i = 0; i < interfaces.length; i++) {
classQueue.addFirst(interfaces[i]);
}
@@ -267,16 +267,19 @@ public class GenericConversionService implements ConversionService {
}
private Converter findTargetConverter(Map sourceTargetConverters, Class targetClass) {
if (sourceTargetConverters.isEmpty()) {
return null;
}
if (targetClass.isInterface()) {
LinkedList classQueue = new LinkedList();
classQueue.addFirst(targetClass);
while (!classQueue.isEmpty()) {
targetClass = (Class) classQueue.removeLast();
Converter converter = (Converter) sourceTargetConverters.get(targetClass);
Class currentClass = (Class) classQueue.removeLast();
Converter converter = (Converter) sourceTargetConverters.get(currentClass);
if (converter != null) {
return converter;
}
Class[] interfaces = targetClass.getInterfaces();
Class[] interfaces = currentClass.getInterfaces();
for (int i = 0; i < interfaces.length; i++) {
classQueue.addFirst(interfaces[i]);
}
@@ -286,15 +289,15 @@ public class GenericConversionService implements ConversionService {
LinkedList classQueue = new LinkedList();
classQueue.addFirst(targetClass);
while (!classQueue.isEmpty()) {
targetClass = (Class) classQueue.removeLast();
Converter converter = (Converter) sourceTargetConverters.get(targetClass);
Class currentClass = (Class) classQueue.removeLast();
Converter converter = (Converter) sourceTargetConverters.get(currentClass);
if (converter != null) {
return converter;
}
if (targetClass.getSuperclass() != null) {
classQueue.addFirst(targetClass.getSuperclass());
if (currentClass.getSuperclass() != null) {
classQueue.addFirst(currentClass.getSuperclass());
}
Class[] interfaces = targetClass.getInterfaces();
Class[] interfaces = currentClass.getInterfaces();
for (int i = 0; i < interfaces.length; i++) {
classQueue.addFirst(interfaces[i]);
}

View File

@@ -39,17 +39,10 @@ import org.springframework.binding.format.DefaultNumberFormatFactory;
* @author Keith Donald
*/
public class DefaultConversionServiceTests extends TestCase {
public void testConvertCompatibleTypes() {
DefaultConversionService service = new DefaultConversionService();
List lst = new ArrayList();
assertSame(lst, service.getConversionExecutor(ArrayList.class, List.class).execute(lst));
try {
service.getConversionExecutor(List.class, ArrayList.class);
fail();
} catch (ConversionExecutorNotFoundException e) {
// expected
}
}
public void testOverrideConverter() {