private <P, J> ContextualGetter<? super S, ? extends P> lookForAlternativeGetter(ClassMeta<P> classMeta, K key, ColumnDefinition<K, ?> columnDefinition, Collection<Type> types, MappingContextFactoryBuilder<?, K> mappingContextFactoryBuilder) { // look for converter Type propertyType = classMeta.getType(); Type sourceType = key.getType(propertyType); Object[] properties = columnDefinition.properties(); ContextualConverter<? super J, ? extends P> converter = converterService.findConverter(sourceType, propertyType, mappingContextFactoryBuilder, properties); if (converter != null) { ContextualGetter<? super S, ? extends J> getter = getterFactory.newGetter(sourceType, key, mappingContextFactoryBuilder, properties); return new FieldMapperGetterWithConverter<S, J, P>(converter, getter); } return lookForInstantiatorGetter(classMeta, key, columnDefinition, types, mappingContextFactoryBuilder); }
private <P, J> ContextualGetter<? super S, ? extends P> lookForAlternativeGetter(ClassMeta<P> classMeta, K key, ColumnDefinition<K, ?> columnDefinition, Collection<Type> types, MappingContextFactoryBuilder<?, K> mappingContextFactoryBuilder) { // look for converter Type propertyType = classMeta.getType(); Type sourceType = key.getType(propertyType); Object[] properties = columnDefinition.properties(); ContextualConverter<? super J, ? extends P> converter = converterService.findConverter(sourceType, propertyType, mappingContextFactoryBuilder, properties); if (converter != null) { ContextualGetter<? super S, ? extends J> getter = getterFactory.newGetter(sourceType, key, mappingContextFactoryBuilder, properties); return new FieldMapperGetterWithConverter<S, J, P>(converter, getter); } return lookForInstantiatorGetter(classMeta, key, columnDefinition, types, mappingContextFactoryBuilder); }
private <T, P> ContextualGetter<? super S, ? extends P> getGetterInstantiator( ClassMeta<P> classMeta, InstantiatorDefinition id, K key, ColumnDefinition<K, ?> columnDefinition, Collection<Type> types, MappingContextFactoryBuilder<?, K> mappingContextFactoryBuilder) { Instantiator<? super T, ? extends P> instantiator = classMeta.getReflectionService().getInstantiatorFactory().getOneArgIdentityInstantiator(id, classMeta.getReflectionService().builderIgnoresNullValues()); final Type paramType = id.getParameters()[0].getGenericType(); ContextualGetter<? super S, ? extends T> subGetter = getterFactory.newGetter(paramType, key, mappingContextFactoryBuilder, columnDefinition ); if (subGetter == null) { if (types.contains(paramType)) { // loop circuit cutter return null; } types.add(paramType); // converter? Type sourceType = key.getType(paramType); ContextualConverter converter = converterService.findConverter(sourceType, paramType, mappingContextFactoryBuilder, columnDefinition.properties()); if (converter != null) { ContextualGetter sourceTypeGetter = getterFactory.newGetter(sourceType, key, mappingContextFactoryBuilder, columnDefinition); subGetter = new FieldMapperGetterWithConverter(converter, sourceTypeGetter); } else { subGetter = lookForInstantiatorGetter(classMeta.getReflectionService().<T>getClassMeta(paramType), key, columnDefinition, types, mappingContextFactoryBuilder); } } if (subGetter != null) { return new InstantiatorContextualGetter<T, S, P>(instantiator, subGetter); } else return null; }
private <T, P> ContextualGetter<? super S, ? extends P> getGetterInstantiator( ClassMeta<P> classMeta, InstantiatorDefinition id, K key, ColumnDefinition<K, ?> columnDefinition, Collection<Type> types, MappingContextFactoryBuilder<?, K> mappingContextFactoryBuilder) { Instantiator<? super T, ? extends P> instantiator = classMeta.getReflectionService().getInstantiatorFactory().getOneArgIdentityInstantiator(id, classMeta.getReflectionService().builderIgnoresNullValues()); final Type paramType = id.getParameters()[0].getGenericType(); ContextualGetter<? super S, ? extends T> subGetter = getterFactory.newGetter(paramType, key, mappingContextFactoryBuilder, columnDefinition ); if (subGetter == null) { if (types.contains(paramType)) { // loop circuit cutter return null; } types.add(paramType); // converter? Type sourceType = key.getType(paramType); ContextualConverter converter = converterService.findConverter(sourceType, paramType, mappingContextFactoryBuilder, columnDefinition.properties()); if (converter != null) { ContextualGetter sourceTypeGetter = getterFactory.newGetter(sourceType, key, mappingContextFactoryBuilder, columnDefinition); subGetter = new FieldMapperGetterWithConverter(converter, sourceTypeGetter); } else { subGetter = lookForInstantiatorGetter(classMeta.getReflectionService().<T>getClassMeta(paramType), key, columnDefinition, types, mappingContextFactoryBuilder); } } if (subGetter != null) { return new InstantiatorContextualGetter<T, S, P>(instantiator, subGetter); } else return null; }