1765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/******************************************************************************* 2765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Copyright (c) 2011 Google, Inc. 3765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * All rights reserved. This program and the accompanying materials 4765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * are made available under the terms of the Eclipse Public License v1.0 5765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * which accompanies this distribution, and is available at 6765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * http://www.eclipse.org/legal/epl-v10.html 7765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 8765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Contributors: 9765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Google, Inc. - initial API and implementation 10765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye *******************************************************************************/ 11765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepackage org.eclipse.wb.internal.core.utils.reflect; 12765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 13765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport java.util.HashMap; 14765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport java.util.Map; 15765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 16765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/** 17765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * {@link Map}-like interface for mapping {@link Class} to value. 18765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 19765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @author scheglov_ke 20765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @coverage core.util 21765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 22765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepublic final class ClassMap<V> { 23765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 24765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 25765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Constructor 26765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 27765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 28765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 29765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Creates new instance of {@link ClassMap}. 30765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 31765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public static <V> ClassMap<V> create() { 32765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return new ClassMap<V>(); 33765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 34765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 35765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 36765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 37765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Map 38765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 39765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 40765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void put(Class<?> key, V value) { 41765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye getMap(key).put(key, value); 42765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 43765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 44765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public V get(Class<?> key) { 45765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return getMap(key).get(key); 46765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 47765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 48765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void remove(Class<?> key) { 49765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye getMap(key).remove(key); 50765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 51765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 52765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void clear(ClassLoader classLoader) { 53765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye getMap(classLoader).clear(); 54765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 55765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 56765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 57765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 58765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Implementation 59765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 60765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 61765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private Map<Class<?>, V> getMap(Class<?> key) { 62765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye ClassLoader classLoader = key.getClassLoader(); 63765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return getMap(classLoader); 64765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 65765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 66765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @SuppressWarnings("unchecked") 67765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private Map<Class<?>, V> getMap(ClassLoader classLoader) { 68765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Object map = ClassLoaderLocalMap.get(classLoader, this); 69765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (map == null) { 70765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye map = new HashMap<Class<?>, V>(); 71765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye ClassLoaderLocalMap.put(classLoader, this, map); 72765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 73765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return (Map<Class<?>, V>) map; 74765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 75765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye} 76