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