Skip to content

Commit 186443b

Browse files
committed
[MOB-9235] Make encryptor support old versions
1 parent 1e4a4ee commit 186443b

File tree

1 file changed

+28
-3
lines changed

1 file changed

+28
-3
lines changed

iterableapi/src/test/java/com/iterable/iterableapi/IterableDataEncryptorTest.java

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static org.junit.Assert.fail;
1919

2020
import java.lang.reflect.Field;
21+
import java.lang.reflect.Method;
2122
import java.lang.reflect.Modifier;
2223
import java.security.KeyStore;
2324
import java.util.ArrayList;
@@ -481,9 +482,33 @@ private static void setFinalStatic(Class<?> clazz, String fieldName, Object newV
481482
Field field = clazz.getDeclaredField(fieldName);
482483
field.setAccessible(true);
483484

484-
Field modifiersField = Field.class.getDeclaredField("modifiers");
485-
modifiersField.setAccessible(true);
486-
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
485+
// On Java 8 and lower, use modifiers field
486+
try {
487+
Field modifiersField = Field.class.getDeclaredField("modifiers");
488+
modifiersField.setAccessible(true);
489+
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
490+
} catch (NoSuchFieldException e) {
491+
// On Java 9+, use VarHandle to modify final fields
492+
try {
493+
// Get the internal Field.modifiers field via JDK internal API
494+
Method getDeclaredFields0 = Class.class.getDeclaredMethod("getDeclaredFields0", boolean.class);
495+
getDeclaredFields0.setAccessible(true);
496+
Field[] fields = (Field[]) getDeclaredFields0.invoke(Field.class, false);
497+
Field modifiersField = null;
498+
for (Field f : fields) {
499+
if ("modifiers".equals(f.getName())) {
500+
modifiersField = f;
501+
break;
502+
}
503+
}
504+
if (modifiersField != null) {
505+
modifiersField.setAccessible(true);
506+
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
507+
}
508+
} catch (Exception ignored) {
509+
// If all attempts fail, try setting the value anyway
510+
}
511+
}
487512

488513
field.set(null, newValue);
489514
} catch (Exception e) {

0 commit comments

Comments
 (0)