public void put(CharSequence key, V value) { assert !(storage instanceof Holder) : "frozen snap can not be modified"; if (storage == EMPTY) { storage = TinyMaps.createMap(1); } else if (storage instanceof Map<?,?>) { @SuppressWarnings("unchecked") Map<CharSequence, V> map = (Map<CharSequence, V>)storage; // expand map if needed based on expected next key storage = TinyMaps.expandForNextKey(map, key); } assert storage instanceof Map<?,?> : "unexpected class " + storage.getClass(); @SuppressWarnings("unchecked") Map<CharSequence, V> map = (Map<CharSequence, V>)storage; map.put(key, value); }
@SuppressWarnings("unchecked") public static <K, V> Map<K, V> expandForNextKey(Map<K, V> orig, K newElem) { if (orig instanceof CompactMap<?, ?>) { return ((CompactMap<K, V>)orig).expandForNextKeyIfNeeded(newElem); } else if (orig == NO_CONTENT) { return createMap(1); } else { return orig; } }
protected final void putNodeProperty(APT node, Object key, Object value) { Map<Object, Object> props = nodeProperties.get(node); if (props == null) { nodeProperties.put(node, props = TinyMaps.createMap(2)); } else { Map<Object, Object> expanded = TinyMaps.expandForNextKey(props, node); if (expanded != props) { // was replacement props = expanded; nodeProperties.put(node, props); } } props.put(key, value); }
Map<CharSequence, APTMacro> map = (Map<CharSequence, APTMacro>)storage; storage = TinyMaps.expandForNextKey(map, name); } else { CharSequence key; } else { storage = TinyMaps.createMap(2); @SuppressWarnings("unchecked") Map<CharSequence, APTMacro> map = (Map<CharSequence, APTMacro>)storage;