From f1ca327fe83b0932fe8240cbcf3b86d550dce2d5 Mon Sep 17 00:00:00 2001 From: Peter Donald Date: Sat, 29 Dec 2001 21:07:18 +0000 Subject: [PATCH] Made the MasterConverter search through the destination classes hierarchy to find a match for converter. This will allow a converter that converts to a specific superclass also work for all subclasses. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270395 13f79535-47bb-0310-9956-ffa450edef68 --- .../converter/DefaultMasterConverter.java | 46 +++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/converter/DefaultMasterConverter.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/converter/DefaultMasterConverter.java index 5029820f6..4fbaaf49a 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/converter/DefaultMasterConverter.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/converter/DefaultMasterConverter.java @@ -71,7 +71,9 @@ public class DefaultMasterConverter * @return the converted object * @exception Exception if an error occurs */ - public Object convert( Class destination, final Object original, final Context context ) + public Object convert( final Class destination, + final Object original, + final Context context ) throws ConverterException { final Class originalClass = original.getClass(); @@ -90,18 +92,8 @@ public class DefaultMasterConverter getLogger().debug( message ); } - //TODO: Start searching inheritance hierarchy for converter - final String name = m_registry.getConverterName( originalClass.getName(), - destination.getName() ); - - if( null == name ) - { - final String message = - REZ.getString( "no-converter.notice", - originalClass.getName(), - destination.getName() ); - throw new ConverterException( message ); - } + //Searching inheritance hierarchy for converter + final String name = getConverterName( originalClass, destination ); try { @@ -122,4 +114,32 @@ public class DefaultMasterConverter throw new ConverterException( message, te ); } } + + private String getConverterName( final Class originalClass, + final Class destination ) + throws ConverterException + { + Class clazz = destination; + + //TODO: Maybe we should search the source classes hierarchy aswell + final Class terminator = Object.class; + while( terminator != clazz ) + { + final String name = + m_registry.getConverterName( originalClass.getName(), + clazz.getName() ); + if( name != null ) + { + return name; + } + + clazz = clazz.getSuperclass(); + } + + final String message = + REZ.getString( "no-converter.notice", + originalClass.getName(), + destination.getName() ); + throw new ConverterException( message ); + } }