
org.sfm.reflect.ReflectionService Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sfm Show documentation
Show all versions of sfm Show documentation
Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low footprint.
package org.sfm.reflect;
import org.sfm.reflect.asm.AsmInstantiatorDefinitionFactory;
import org.sfm.reflect.asm.AsmFactory;
import org.sfm.reflect.asm.AsmHelper;
import org.sfm.reflect.meta.*;
import org.sfm.tuples.Tuple2;
import org.sfm.tuples.Tuples;
import java.io.IOException;
import java.lang.reflect.*;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import static org.sfm.utils.Asserts.requireNonNull;
public class ReflectionService {
private final ObjectSetterFactory objectSetterFactory;
private final ObjectGetterFactory objectGetterFactory;
private final InstantiatorFactory instantiatorFactory;
private final AsmFactory asmFactory;
private final AliasProvider aliasProvider;
private final boolean asmPresent;
private final boolean asmActivated;
private final ConcurrentMap> metaCache = new ConcurrentHashMap>();
public ReflectionService(final boolean asmPresent, final boolean asmActivated, final AsmFactory asmFactory) {
this.asmPresent = asmPresent;
this.asmActivated = asmActivated && asmPresent;
if (asmActivated) {
this.asmFactory = asmFactory;
} else {
this.asmFactory = null;
}
this.objectSetterFactory = new ObjectSetterFactory(asmFactory);
this.objectGetterFactory = new ObjectGetterFactory(asmFactory);
this.instantiatorFactory = new InstantiatorFactory(asmFactory);
this.aliasProvider = AliasProviderFactory.getAliasProvider();
}
public ObjectSetterFactory getObjectSetterFactory() {
return objectSetterFactory;
}
public InstantiatorFactory getInstantiatorFactory() {
return instantiatorFactory;
}
public boolean isAsmPresent() {
return asmPresent;
}
public boolean isAsmActivated() {
return asmActivated;
}
public AsmFactory getAsmFactory() {
return asmFactory;
}
@SuppressWarnings("unchecked")
public ClassMeta getClassMeta(Type target) {
requireNonNull("target", target);
ClassMeta meta = (ClassMeta) metaCache.get(target);
if (meta == null) {
meta = newClassMeta(target);
requireNonNull("meta", meta);
metaCache.putIfAbsent(target, meta);
}
return meta;
}
@SuppressWarnings("unchecked")
private ClassMeta newClassMeta(Type target) {
Class clazz = TypeHelper.toClass(target);
if (Map.class.isAssignableFrom(clazz)) {
return (ClassMeta) newMapMeta(target);
} else if (List.class.isAssignableFrom(clazz)) {
return newArrayListMeta(target);
} else if (clazz.isArray()) {
return newArrayMeta(clazz);
//IFJAVA8_START
} else if (Optional.class.isAssignableFrom(clazz)) {
return new OptionalClassMeta(target, this);
//IFJAVA8_END
} else if (Tuples.isTuple(target)) {
return new TupleClassMeta(target, this);
} else if (isFastTuple(clazz)) {
return new FastTupleClassMeta(target, this);
}
if (isDirectType(target)) {
return new DirectClassMeta(target, this);
} else {
return new ObjectClassMeta(target, this);
}
}
public ClassMeta getClassMetaExtraInstantiator(Type target, Member builderInstantiator) {
return new ObjectClassMeta(target, builderInstantiator, this);
}
private ClassMeta
© 2015 - 2025 Weber Informatics LLC | Privacy Policy