From 0a427c9f5a90b35a23fb2955552a94c0663b31d1 Mon Sep 17 00:00:00 2001
From: Robert Scott <code@humanleg.org.uk>
Date: Thu, 1 Nov 2018 22:02:17 +0000
Subject: [PATCH v1 1/4] TestUtils: add setPrivateField

---
 test/unit/org/openstreetmap/josm/TestUtils.java | 37 +++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/test/unit/org/openstreetmap/josm/TestUtils.java b/test/unit/org/openstreetmap/josm/TestUtils.java
index d5684b3da..5f073b44c 100644
--- a/test/unit/org/openstreetmap/josm/TestUtils.java
+++ b/test/unit/org/openstreetmap/josm/TestUtils.java
@@ -203,6 +203,43 @@ public final class TestUtils {
     }
 
     /**
+     * Sets a private field value.
+     * @param obj object
+     * @param fieldName private field name
+     * @param value replacement value
+     * @throws ReflectiveOperationException if a reflection operation error occurs
+     */
+    public static void setPrivateField(
+        final Object obj,
+        final String fieldName,
+        final Object value
+    ) throws ReflectiveOperationException {
+        setPrivateField(obj.getClass(), obj, fieldName, value);
+    }
+
+    /**
+     * Sets a private field value.
+     * @param cls object class
+     * @param obj object
+     * @param fieldName private field name
+     * @param value replacement value
+     * @throws ReflectiveOperationException if a reflection operation error occurs
+     */
+    public static void setPrivateField(
+        final Class<?> cls,
+        final Object obj,
+        final String fieldName,
+        final Object value
+    ) throws ReflectiveOperationException {
+        Field f = cls.getDeclaredField(fieldName);
+        AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
+            f.setAccessible(true);
+            return null;
+        });
+        f.set(obj, value);
+    }
+
+    /**
      * Returns a private static field value.
      * @param cls object class
      * @param fieldName private field name
-- 
2.11.0

