private static void initFieldsOfInetAddress$CacheEntry()

in library/src/main/java/com/alibaba/dcm/internal/InetAddressCacheUtilForOld.java [264:292]


    private static void initFieldsOfInetAddress$CacheEntry() throws ClassNotFoundException, NoSuchFieldException {
        if (expirationFieldOfInetAddress$CacheEntry != null && addressesFieldOfInetAddress$CacheEntry != null) return;

        synchronized (InetAddressCacheUtilForOld.class) {
            final Class<?> cacheEntryClass = Class.forName("java.net.InetAddress$CacheEntry");
            // double check
            if (expirationFieldOfInetAddress$CacheEntry != null && addressesFieldOfInetAddress$CacheEntry != null)
                return;

            // InetAddress.CacheEntry has 2 filed:
            // - for jdk 6, address and expiration
            // - for jdk 7+, addresses(*renamed*!) and expiration
            //
            // code in jdk 6:
            //   https://hg.openjdk.java.net/jdk6/jdk6/jdk/file/8deef18bb749/src/share/classes/java/net/InetAddress.java#l739
            // code in jdk 7:
            //   https://hg.openjdk.java.net/jdk7u/jdk7u/jdk/file/4dd5e486620d/src/share/classes/java/net/InetAddress.java#l742
            // code in jdk 8:
            //   https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/45e4e636b757/src/share/classes/java/net/InetAddress.java#l748

            Field expirationField = cacheEntryClass.getDeclaredField("expiration");
            expirationField.setAccessible(true);
            expirationFieldOfInetAddress$CacheEntry = expirationField;

            Field addressesField = cacheEntryClass.getDeclaredField("addresses");
            addressesField.setAccessible(true);
            addressesFieldOfInetAddress$CacheEntry = addressesField;
        }
    }