| 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; |
| } |
| } |
| |