Ticket #16943: v1-0001-TestUtils-add-setPrivateField.patch

File v1-0001-TestUtils-add-setPrivateField.patch, 1.9 KB (added by ris, 7 years ago)
  • test/unit/org/openstreetmap/josm/TestUtils.java

    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 b public final class TestUtils {  
    203203    }
    204204
    205205    /**
     206     * Sets a private field value.
     207     * @param obj object
     208     * @param fieldName private field name
     209     * @param value replacement value
     210     * @throws ReflectiveOperationException if a reflection operation error occurs
     211     */
     212    public static void setPrivateField(
     213        final Object obj,
     214        final String fieldName,
     215        final Object value
     216    ) throws ReflectiveOperationException {
     217        setPrivateField(obj.getClass(), obj, fieldName, value);
     218    }
     219
     220    /**
     221     * Sets a private field value.
     222     * @param cls object class
     223     * @param obj object
     224     * @param fieldName private field name
     225     * @param value replacement value
     226     * @throws ReflectiveOperationException if a reflection operation error occurs
     227     */
     228    public static void setPrivateField(
     229        final Class<?> cls,
     230        final Object obj,
     231        final String fieldName,
     232        final Object value
     233    ) throws ReflectiveOperationException {
     234        Field f = cls.getDeclaredField(fieldName);
     235        AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
     236            f.setAccessible(true);
     237            return null;
     238        });
     239        f.set(obj, value);
     240    }
     241
     242    /**
    206243     * Returns a private static field value.
    207244     * @param cls object class
    208245     * @param fieldName private field name