Hi there, happy new year :)

During resolving WW-4906, I reached following difficulties with these 
two classes and I need your comments if any, please:

DefaultConversionAnnotationProcessor

>     public void process(Map<String, Object> mapping, TypeConversion tc, 
> String key) {
>         ...
>         try {
>             if (tc.type() == ConversionType.APPLICATION) {
>                 ...
>             } else {
>                 if (tc.rule() == ConversionRule.KEY_PROPERTY || tc.rule() == 
> ConversionRule.CREATE_IF_NULL) {

If CREATE_IF_NULL and KEY_PROPERTY have same behavior, why they are two? 
What makes difference?

>                     mapping.put(key, tc.value());

I could not find any sample or doc about usage and advantages of 
specifying value explicitly.

>                 }
>                 //for properties of classes
>                 else if (tc.rule() != ConversionRule.ELEMENT || tc.rule() == 
> ConversionRule.KEY || tc.rule() == ConversionRule.COLLECTION) {

`tc.rule() != ConversionRule.ELEMENT` was enough i.e. next two ORs don't 
make any difference. Or maybe it's wrong and next two ORs should being 
keeped?

>                     ...
>                 }
>                 //for keys of Maps
>                 else if (tc.rule() == ConversionRule.KEY) {

Execution never reaches inside this block. Here 100% tc.rule() is 
ConversionRule.ELEMENT because of previous if. And also why previous if 
also has this in it's ORs?

Again, I could not find any sample or doc about usage and advantages of 
this block! (following lines).

>                     Class<?> converterClass;
>                     if (StringUtils.isNoneEmpty(tc.converter())) {
>                         converterClass = 
> Thread.currentThread().getContextClassLoader().loadClass(tc.converter());
>                         //check if the converter is a type converter if it is 
> one
>                         //then just put it in the map as is. Otherwise
>                         //put a value in for the type converter of the class
>                     } else {
>                         converterClass = tc.converterClass();
>                     }
> 
>                     LOG.debug("Converter class: [{}]", converterClass);
> 
>                     if (converterClass.isAssignableFrom(TypeConverter.class)) 
> {
>                         mapping.put(key, 
> converterCreator.createTypeConverter(tc.converter()));
>                     } else {
>                         mapping.put(key, converterClass);
>                         LOG.debug("Object placed in mapping for key [{}] is 
> [{}]", key, mapping.get(key));
>                     }
>                 }
>                 //elements(values) of maps / lists
>                 else {

Again, I could not find any sample or doc about usage and advantages of 
this block! (following lines).

>                     if (StringUtils.isNoneEmpty(tc.converter())) {
>                         mapping.put(key, 
> Thread.currentThread().getContextClassLoader().loadClass(tc.converter()));
>                     } else {
>                         mapping.put(key, tc.converterClass());
>                     }
>                 }
>             }
>         } catch (Exception e) {
>             LOG.debug("Got exception for {}", key, e);
>         }
>     }


ConversionRule

> public enum ConversionRule {
> 
>     PROPERTY, COLLECTION, MAP, KEY, KEY_PROPERTY, ELEMENT, CREATE_IF_NULL;

Again, I could not find any comprehensive sample or doc about usage and 
advantages of each one!


Thanks in advance!

Reply via email to