package org.deuce.transform.asm.type;
import org.deuce.objectweb.asm.Type;
/**
* Converts {@link Type} to {@link TypeCodeResolver}
* @author Guy Korland
*
* @since 1.0
*/
public class TypeCodeResolverFactory {
/**
* Static factory
*/
private TypeCodeResolverFactory() {}
final private static IntTypeCodeResolver BOOLEAN_RESOLVER =
new IntTypeCodeResolver(Type. BOOLEAN_TYPE);
final private static IntTypeCodeResolver BYTE_RESOLVER =
new IntTypeCodeResolver(Type.BYTE_TYPE);
final private static IntTypeCodeResolver CHAR_RESOLVER =
new IntTypeCodeResolver(Type.CHAR_TYPE);
final private static IntTypeCodeResolver SHORT_RESOLVER =
new IntTypeCodeResolver(Type.SHORT_TYPE);
final private static IntTypeCodeResolver INT_RESOLVER =
new IntTypeCodeResolver(Type.INT_TYPE);
final private static LongTypeCodeResolver LONG_RESOLVER =
new LongTypeCodeResolver(Type.LONG_TYPE);
final private static FloatTypeCodeResolver FLOAT_RESOLVER =
new FloatTypeCodeResolver(Type.FLOAT_TYPE);
final private static DoubleTypeCodeResolver DOUBLE_RESOLVER =
new DoubleTypeCodeResolver(Type.DOUBLE_TYPE);
static public TypeCodeResolver getReolver( Type type) {
switch( type.getSort()) {
case Type.VOID:
return null;
case Type.BOOLEAN:
return BOOLEAN_RESOLVER;
case Type.BYTE:
return BYTE_RESOLVER;
case Type.CHAR:
return CHAR_RESOLVER;
case Type.SHORT:
return SHORT_RESOLVER;
case Type.INT:
return INT_RESOLVER;
case Type.LONG:
return LONG_RESOLVER;
case Type.FLOAT:
return FLOAT_RESOLVER;
case Type.DOUBLE:
return DOUBLE_RESOLVER;
default:
return new ReferenceTypeCodeResolver(type);
}
}
}