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