package org.etk.orm.plugins.bean; import java.util.List; import org.etk.orm.plugins.bean.mapping.JLOTypeInfo; import org.etk.reflect.api.ClassTypeInfo; import org.etk.reflect.api.TypeInfo; import org.etk.reflect.api.TypeVariableInfo; import org.etk.reflect.api.WildcardTypeInfo; class Utils { /* * todo: defines clearly what this does. */ static ClassTypeInfo resolveToClassType(ClassTypeInfo baseType, TypeInfo type) { TypeInfo resolvedType = baseType.resolve(type); // if (resolvedType instanceof ClassTypeInfo) { return (ClassTypeInfo)resolvedType; } else if (resolvedType instanceof TypeVariableInfo) { return resolveToClassType(baseType, ((TypeVariableInfo)resolvedType).getBounds().get(0)); } else if (resolvedType instanceof WildcardTypeInfo) { WildcardTypeInfo wti = (WildcardTypeInfo) resolvedType; List<TypeInfo> bounds = wti.getUpperBounds(); if (bounds.size() == 0) { bounds = wti.getLowerBounds(); } if (bounds.size() == 0) { return JLOTypeInfo.get(); } else { return resolveToClassType(baseType, bounds.get(0)); } } else { return null; } } }