package gw.lang.parser.coercers;
import gw.lang.reflect.IType;
import gw.lang.reflect.IConstructorInfo;
import gw.lang.reflect.TypeSystem;
import gw.config.CommonServices;
/**
* Copyright 2010 Guidewire Software, Inc.
*/
public class LoosedDimensionCoercer extends StandardCoercer
{
private static LoosedDimensionCoercer INSTANCE = new LoosedDimensionCoercer();
public Object coerceValue( IType typeToCoerceTo, Object value )
{
IConstructorInfo ci = typeToCoerceTo.getTypeInfo().getCallableConstructor( TypeSystem.getFromObject( value ) );
if( ci == null )
{
throw new RuntimeException( "Could not coerce " + value + " to " + typeToCoerceTo.getName() + ". No constructor found." );
}
return ci.getConstructor().newInstance( CommonServices.getCoercionManager().convertValue( value, ci.getParameters()[0].getFeatureType() ) );
}
public static LoosedDimensionCoercer instance()
{
return INSTANCE;
}
}