private List<Class<?>> getTypeHierarchy(Class<?> type) {
			if (type.isPrimitive()) {
				type = primitiveTypeToWrapperMap.get(type);
			}
			Set<Class<?>> typeHierarchy = new LinkedHashSet<Class<?>>();
			collectTypeHierarchy(typeHierarchy, type);
			if (type.isArray()) {
				typeHierarchy.add(Object[].class);
			}
			typeHierarchy.add(Object.class);
			return new ArrayList<Class<?>>(typeHierarchy);
		}