public TypeMapping(Type type) { this.type = type; this.rawClass = Reflection.getRawClass(type); }
public static Type getSuperclass(Type type) { return getRawClass(type).getGenericSuperclass(); }
/** finds the most concrete polymorphic mapping that matches the given type. */ public PolymorphicMapping getPolymorphicMapping(Type type) { Class<?> clazz = Reflection.getRawClass(type); PolymorphicMapping polymorphicMapping = polymorphicMappings.get(clazz); while (polymorphicMapping==null && clazz!=null && clazz!=Object.class) { clazz = clazz.getSuperclass(); polymorphicMapping = polymorphicMappings.get(clazz); } return polymorphicMapping; }
public static Map<TypeVariable, Type> getTypeArgsMap(Type type) { Type[] typeArgs = getTypeArgs(type); if (typeArgs==null) { return null; } Class<?> rawClass = getRawClass(type); Map<TypeVariable,Type> typeVariables = new HashMap<>(); TypeVariable<?>[] typeParameters = rawClass.getTypeParameters(); for (int i=0; i<typeArgs.length; i++) { typeVariables.put(typeParameters[i], typeArgs[i]); } return typeVariables; }
public static String getSimpleName(Type type) { if (type==null) { return "null"; } if (type instanceof Class) { return ((Class)type).getSimpleName(); } if (type instanceof ParameterizedType) { ParameterizedType parameterizedType = (ParameterizedType) type; StringBuilder name = new StringBuilder(); String rawname = getRawClass(parameterizedType.getRawType()).getSimpleName(); name.append(rawname); Type[] typeArgs = parameterizedType.getActualTypeArguments(); if (typeArgs!=null) { name.append("<"); for (int i = 0; i < typeArgs.length; i++) { if (i!=0) { name.append(","); } name.append(getSimpleName(typeArgs[i])); } name.append(">"); } return name.toString(); } return type.toString(); }
public void scanFieldMappings(Type type, TypeMapping typeMapping) { List<FieldMapping> fieldMappings = new ArrayList<>(); scanFields(fieldMappings, type); Class<?> clazz = Reflection.getRawClass(type); Set<FieldMapping> inlineFieldMappings = new HashSet<>(); for (FieldMapping fieldMapping: fieldMappings) {
throw new IllegalArgumentException("type may not be null"); Class<?> clazz = Reflection.getRawClass(type); Map<TypeVariable,Type> typeArgs = Reflection.getTypeArgsMap(type); Field[] declaredFields = clazz.getDeclaredFields();
public DataTypeImpl getDataTypeByValue(Type type) { Class< ? > rawClass = Reflection.getRawClass(type); if (rawClass==List.class) { Type elementType = Reflection.getTypeArg(type, 0); DataTypeImpl elementDataType = getDataTypeByValue(elementType); return new ListTypeImpl(elementDataType); } return getDataTypeByValue(rawClass); }
public JsonTypeMapper getTypeMapper(Type type) { JsonTypeMapper jsonTypeMapper = typeMappers.get(type); if (jsonTypeMapper!=null) { return jsonTypeMapper; } Class clazz = Reflection.getRawClass(type); for (JsonTypeMapperFactory factory: jsonTypeMapperFactories) { jsonTypeMapper = factory.createTypeMapper(type, clazz, this); if (jsonTypeMapper!=null) { break; } } if (jsonTypeMapper==null) { PolymorphicMapping polymorphicMapping = getPolymorphicMapping(type); if (polymorphicMapping!=null) { polymorphicMapping = getParameterizedPolymorphicMapping(type, polymorphicMapping); jsonTypeMapper = new PolymorphicBeanMapper(polymorphicMapping); } else { TypeMapping typeMapping = getTypeMapping(type); jsonTypeMapper = new BeanMapper(typeMapping); } } jsonTypeMapper.setMappings(this); typeMappers.put(type, jsonTypeMapper); return jsonTypeMapper; }