class New {

    public static <K, V> Map<K, V> unmodifiableMap(Map<K, V> map)
    {
        return map == null ? null : map.getClass().getAnnotation(Immutable.class) != null ? map : map.isEmpty()
                ? Collections.<K, V>emptyMap() : map.size() == 1 ? singletonMap(map) : Collections.unmodifiableMap(map(map));
    }

    private  New();

}