@Override public Converter<? extends Map<?, ?>> create(Type type, Genson genson) { Type expandedType = type; if (getRawClass(type).getTypeParameters().length == 0) { expandedType = expandType(lookupGenericType(Map.class, getRawClass(type)), type); } Type keyType = typeOf(0, expandedType); Type valueType = typeOf(1, expandedType); Class<?> keyRawClass = getRawClass(keyType); DefaultConverters.KeyAdapter<?> keyAdapter; if (keyRawClass.equals(IdRef.class)) { keyAdapter = this.idRefAdapter; } else { keyAdapter = DefaultConverters.MapConverterFactory.keyAdapter(keyRawClass); } Converter<Object> valueConverter; if (valueIsLazyJsonIfList(valueType)) { valueConverter = LazyJsonConverters.get(null, valueType); } else { valueConverter = genson.provideConverter(valueType); } if (keyAdapter != null) { return createConverter(getRawClass(type), keyAdapter, valueConverter); } return null; }
@SuppressWarnings({"rawtypes", "unchecked"}) public Converter<? extends Map<?, ?>> create(Type type, Genson genson) { // ok this is a fix but not the cleanest one... we make sure it is a parameterized type // otherwise we search for map impl in its hierarchy Type expandedType = type; if (getRawClass(type).getTypeParameters().length == 0) { expandedType = expandType(lookupGenericType(Map.class, getRawClass(type)), type); } Type keyType = typeOf(0, expandedType); Type valueType = typeOf(1, expandedType); Class<?> keyRawClass = getRawClass(keyType); KeyAdapter<?> keyAdapter = keyAdapter(keyRawClass); if (keyAdapter != null) return createConverter(getRawClass(type), keyAdapter, genson.provideConverter(valueType)); else return new ComplexMapConverter(genson.provideConverter(keyType), genson.provideConverter(valueType)); }
@SuppressWarnings({"rawtypes", "unchecked"}) public Converter<? extends Map<?, ?>> create(Type type, Genson genson) { // ok this is a fix but not the cleanest one... we make sure it is a parameterized type // otherwise we search for map impl in its hierarchy Type expandedType = type; if (getRawClass(type).getTypeParameters().length == 0) { expandedType = expandType(lookupGenericType(Map.class, getRawClass(type)), type); } Type keyType = typeOf(0, expandedType); Type valueType = typeOf(1, expandedType); Class<?> keyRawClass = getRawClass(keyType); KeyAdapter<?> keyAdapter = keyAdapter(keyRawClass); if (keyAdapter != null) return createConverter(getRawClass(type), keyAdapter, genson.provideConverter(valueType)); else return new ComplexMapConverter(genson.provideConverter(keyType), genson.provideConverter(valueType)); }