blob: c1952d1119a9356ccee9db9bc196be479de57980 [file] [log] [blame]
import java.util.*;
interface TypesafeMap<BASE> {
@SuppressWarnings({"UnusedDeclaration"})
public interface Key<BASE,VALUE> { }
public <VALUE, KEY extends Key<BASE,VALUE>>
boolean has(Class<KEY> key);
public <VALUE, KEY extends Key<BASE,VALUE>>
VALUE get(Class<KEY> key);
public <VALUEBASE, VALUE extends VALUEBASE, KEY extends Key<BASE,VALUEBASE>>
VALUE set(Class<KEY> key, VALUE value);
public <VALUE, KEY extends Key<BASE,VALUE>>
VALUE remove(Class<KEY> key);
public Set<Class<?>> keySet();
public <VALUE, KEY extends Key<CoreMap, VALUE>>
boolean containsKey(Class<KEY> key);
}
interface CoreMap extends TypesafeMap<CoreMap> { }
interface CoreAnnotation<V>
extends TypesafeMap.Key<CoreMap, V> {
public Class<V> getType();
}
class CoreMaps {
public static <K,V> Map<K,V> toMap(Collection<CoreMap> coremaps,
Class<CoreAnnotation<K>> keyKey, Class<CoreAnnotation<V>> valueKey) {
Map<K,V> map = new HashMap<K,V>();
for (CoreMap cm : coremaps) {
map.put(cm.get(keyKey), cm.get(valueKey));
}
return map;
}
}