/* * Copyright 2013 Guidewire Software, Inc. */ package gw.lang.parser.coercers; import gw.lang.parser.IResolvingCoercer; import gw.lang.reflect.IHasJavaClass; import gw.lang.reflect.IType; import gw.lang.reflect.java.IJavaType; import gw.lang.reflect.java.JavaTypes; import gw.lang.reflect.java.JavaTypes; public class MetaTypeToClassCoercer extends BaseCoercer implements IResolvingCoercer { private static final MetaTypeToClassCoercer INSTANCE = new MetaTypeToClassCoercer(); public Object coerceValue( IType typeToCoerceTo, Object value ) { IHasJavaClass javaIntrinsicType = (IHasJavaClass )value; return javaIntrinsicType.getBackingClass(); } public boolean isExplicitCoercion() { return false; } public boolean handlesNull() { return false; } public IType resolveType( IType target, IType source ) { if( target.getGenericType() == JavaTypes.CLASS() ) { return JavaTypes.CLASS().getParameterizedType(source.getTypeParameters()[0]); } else { return source; } } public int getPriority( IType to, IType from ) { return 1; } public static MetaTypeToClassCoercer instance() { return INSTANCE; } }