in src/main/java/org/apache/cassandra/distributed/shared/InstanceClassLoader.java [250:279]
public static Field getField(Class<?> clazz, String fieldName) throws NoSuchFieldException
{
// below code works before Java 12
try
{
return clazz.getDeclaredField(fieldName);
}
catch (NoSuchFieldException e)
{
// this is mitigation for JDK 17 (https://bugs.openjdk.org/browse/JDK-8210522)
try
{
Method getDeclaredFields0 = Class.class.getDeclaredMethod("getDeclaredFields0", boolean.class);
getDeclaredFields0.setAccessible(true);
Field[] fields = (Field[]) getDeclaredFields0.invoke(clazz, false);
for (Field field : fields)
{
if (fieldName.equals(field.getName()))
{
return field;
}
}
}
catch (ReflectiveOperationException ex)
{
e.addSuppressed(ex);
}
throw e;
}
}