public <T> Class<? extends T> getDestinationClass(Class<?> src, Class<T> expectedDest) {
		
		while (src != null && src != Object.class) {
			if (src.getAnnotation(Builder.class) != null) {
				Class<?> dest = src.getAnnotation(Builder.class).destination();
				
				if (expectedDest.isAssignableFrom(dest)) {
					return (Class<? extends T>)dest;
				}

				break;
			}
			
			src = src.getSuperclass();
		}

		if (expectedDest.isAssignableFrom(src)) {
			return (Class<T>)src;
		}
		return expectedDest;
	}