in johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mappings.java [155:218]
public Getter(final AccessMode.Reader reader, final boolean dynamic,
final boolean primitive, final boolean array,
final boolean collection, final boolean map,
final MapperConverter converter,
final ObjectConverter.Writer providedObjectConverter,
final int version, final String[] ignoreNested) {
this.reader = reader;
this.version = version;
Adapter theConverter = null;
Adapter theItemConverter = null;
ObjectConverter.Writer theObjectConverter = providedObjectConverter;
if (converter != null) {
if (converter instanceof ObjectConverter.Writer) {
theObjectConverter = (ObjectConverter.Writer) converter;
}
if (theObjectConverter == null) {
Adapter adapter;
final Type readerType = reader.getType();
if (converter instanceof Converter) {
adapter = new ConverterAdapter((Converter) converter, readerType);
} else {
adapter = (Adapter) converter;
}
if (matches(readerType, adapter)) {
theConverter = adapter;
} else {
if (converter instanceof Converter) {
if (ParameterizedType.class.isInstance(readerType) && ParameterizedType.class.cast(readerType).getActualTypeArguments().length > 0) {
final Type[] args = ParameterizedType.class.cast(readerType).getActualTypeArguments();
// List<A> or Map<String, A> lead to read the last arg in all cases
theItemConverter = new ConverterAdapter((Converter) converter, args[args.length - 1]);
} else {
theItemConverter = adapter;
}
} else {
theItemConverter = adapter;
}
}
}
}
this.converter = theConverter;
this.itemConverter = theItemConverter;
this.objectConverter = theObjectConverter;
this.ignoreNested = ignoreNested == null || ignoreNested.length == 0 ? null : new HashSet<>(asList(ignoreNested));
if (converter == null) {
this.dynamic = dynamic;
this.array = array;
this.collection = collection;
this.primitive = primitive;
this.map = map;
} else { // todo: likely find from/to types from the adapter and adjust these meta accordingly
this.dynamic = true;
this.array = array;
this.collection = collection;
this.primitive = primitive;
this.map = false;
}
}