Browse Source

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
master
Peter Donald 23 years ago
parent
commit
f1ca327fe8
1 changed files with 33 additions and 13 deletions
  1. +33
    -13
      proposal/myrmidon/src/java/org/apache/myrmidon/components/converter/DefaultMasterConverter.java

+ 33
- 13
proposal/myrmidon/src/java/org/apache/myrmidon/components/converter/DefaultMasterConverter.java View File

@@ -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 );
}
}

Loading…
Cancel
Save