private static Class<?> map(String className, int id) { Class<?> clazz = RuntimeEnv.loadClass(className); __nonPublicCollections.put(clazz, id); return clazz; }
static { map("java.util.Collections$EmptySet", ID_EMPTY_SET); map("java.util.Collections$EmptyList", ID_EMPTY_LIST); Class<?> cSingletonSet = map("java.util.Collections$SingletonSet", ID_SINGLETON_SET); Class<?> cSingletonList = map("java.util.Collections$SingletonList", ID_SINGLETON_LIST); Class<?> cSetFromMap = map("java.util.Collections$SetFromMap", ID_SET_FROM_MAP); Class<?> cCopiesList = map("java.util.Collections$CopiesList", ID_COPIES_LIST); Class<?> cUnmodifiableCollection = map("java.util.Collections$UnmodifiableCollection", ID_UNMODIFIABLE_COLLECTION); Class<?> cUnmodifiableSet = map("java.util.Collections$UnmodifiableSet", ID_UNMODIFIABLE_SET); Class<?> cUnmodifiableSortedSet = map("java.util.Collections$UnmodifiableSortedSet", ID_UNMODIFIABLE_SORTED_SET); Class<?> cUnmodifiableList = map("java.util.Collections$UnmodifiableList", ID_UNMODIFIABLE_LIST); Class<?> cUnmodifiableRandomAccessList = map( "java.util.Collections$UnmodifiableRandomAccessList", ID_UNMODIFIABLE_RANDOM_ACCESS_LIST); Class<?> cSynchronizedCollection = map("java.util.Collections$SynchronizedCollection", ID_SYNCHRONIZED_COLLECTION); Class<?> cSynchronizedSet = map("java.util.Collections$SynchronizedSet", ID_SYNCHRONIZED_SET); Class<?> cSynchronizedSortedSet = map("java.util.Collections$SynchronizedSortedSet", ID_SYNCHRONIZED_SORTED_SET); Class<?> cSynchronizedList = map("java.util.Collections$SynchronizedList", ID_SYNCHRONIZED_LIST); Class<?> cSynchronizedRandomAccessList = map( "java.util.Collections$SynchronizedRandomAccessList", ID_SYNCHRONIZED_RANDOM_ACCESS_LIST); Class<?> cCheckedCollection = map("java.util.Collections$CheckedCollection", ID_CHECKED_COLLECTION); Class<?> cCheckedSet = map("java.util.Collections$CheckedSet", ID_CHECKED_SET); Class<?> cCheckedSortedSet = map("java.util.Collections$CheckedSortedSet", ID_CHECKED_SORTED_SET); Class<?> cCheckedList = map("java.util.Collections$CheckedList", ID_CHECKED_LIST); Class<?> cCheckedRandomAccessList = map("java.util.Collections$CheckedRandomAccessList", ID_CHECKED_RANDOM_ACCESS_LIST); try { fSingletonSet_element = cSingletonSet.getDeclaredField("element"); fSingletonList_element = cSingletonList.getDeclaredField("element"); fSetFromMap_m = cSetFromMap.getDeclaredField("m"); fSetFromMap_s = cSetFromMap.getDeclaredField("s"); fCopiesList_n = cCopiesList.getDeclaredField("n"); fCopiesList_element = cCopiesList.getDeclaredField("element"); fUnmodifiableCollection_c = cUnmodifiableCollection.getDeclaredField("c"); fUnmodifiableSortedSet_ss = cUnmodifiableSortedSet.getDeclaredField("ss"); fUnmodifiableList_list = cUnmodifiableList.getDeclaredField("list"); fSynchronizedCollection_c = cSynchronizedCollection.getDeclaredField("c"); fSynchronizedCollection_mutex = cSynchronizedCollection.getDeclaredField("mutex"); fSynchronizedSortedSet_ss = cSynchronizedSortedSet.getDeclaredField("ss"); fSynchronizedList_list = cSynchronizedList.getDeclaredField("list"); fCheckedCollection_c = cCheckedCollection.getDeclaredField("c"); fCheckedCollection_type = cCheckedCollection.getDeclaredField("type"); fCheckedSortedSet_ss = cCheckedSortedSet.getDeclaredField("ss"); fCheckedList_list = cCheckedList.getDeclaredField("list"); } catch (Exception e) { throw new RuntimeException(e); } // field accessors fSingletonSet_element.setAccessible(true); fSingletonList_element.setAccessible(true); fSetFromMap_m.setAccessible(true); fSetFromMap_s.setAccessible(true); fCopiesList_n.setAccessible(true); fCopiesList_element.setAccessible(true); fUnmodifiableCollection_c.setAccessible(true); fUnmodifiableSortedSet_ss.setAccessible(true); fUnmodifiableList_list.setAccessible(true); fSynchronizedCollection_c.setAccessible(true); fSynchronizedCollection_mutex.setAccessible(true); fSynchronizedSortedSet_ss.setAccessible(true); fSynchronizedList_list.setAccessible(true); fCheckedCollection_c.setAccessible(true); fCheckedCollection_type.setAccessible(true); fCheckedSortedSet_ss.setAccessible(true); fCheckedList_list.setAccessible(true); // instantiators iSingletonSet = RuntimeEnv.newInstantiator(cSingletonSet); iSingletonList = RuntimeEnv.newInstantiator(cSingletonList); iSetFromMap = RuntimeEnv.newInstantiator(cSetFromMap); iCopiesList = RuntimeEnv.newInstantiator(cCopiesList); iUnmodifiableCollection = RuntimeEnv.newInstantiator(cUnmodifiableCollection); iUnmodifiableSet = RuntimeEnv.newInstantiator(cUnmodifiableSet); iUnmodifiableSortedSet = RuntimeEnv.newInstantiator(cUnmodifiableSortedSet); iUnmodifiableList = RuntimeEnv.newInstantiator(cUnmodifiableList); iUnmodifiableRandomAccessList = RuntimeEnv.newInstantiator(cUnmodifiableRandomAccessList); iSynchronizedCollection = RuntimeEnv.newInstantiator(cSynchronizedCollection); iSynchronizedSet = RuntimeEnv.newInstantiator(cSynchronizedSet); iSynchronizedSortedSet = RuntimeEnv.newInstantiator(cSynchronizedSortedSet); iSynchronizedList = RuntimeEnv.newInstantiator(cSynchronizedList); iSynchronizedRandomAccessList = RuntimeEnv.newInstantiator(cSynchronizedRandomAccessList); iCheckedCollection = RuntimeEnv.newInstantiator(cCheckedCollection); iCheckedSet = RuntimeEnv.newInstantiator(cCheckedSet); iCheckedSortedSet = RuntimeEnv.newInstantiator(cCheckedSortedSet); iCheckedList = RuntimeEnv.newInstantiator(cCheckedList); iCheckedRandomAccessList = RuntimeEnv.newInstantiator(cCheckedRandomAccessList); }