mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-17 15:50:53 +07:00
50 lines
1.1 KiB
Java
50 lines
1.1 KiB
Java
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;
|
|
}
|
|
}
|
|
|