public static<BUILDER extends ConfigBuilder> void setValues(BUILDER destination, BUILDER source) {
        try {
            Method setter = destination.getClass().getDeclaredMethod("override", destination.getClass());
            setter.setAccessible(true);
            setter.invoke(destination, source);
            setter.setAccessible(false);
        } catch (Exception e) {
            throw new ConfigurationRuntimeException("Could not set values on config builder." +
                                                    destination.getClass().getName(), e);
        }
    }
@Test
    public void require_that_builder_values_can_be_overridden_by_another_builder() {
        FunctionTestConfig.Builder destination = createVariableAccessBuilder();

        FunctionTestConfig.Builder source = new FunctionTestConfig.Builder()
                .int_val(-1)
                .intarr(0)
                .doublearr(0.0)
                .basicStruct(b -> b.bar(-1).intArr(0))
                .myarray(b -> b
                        .intval(-1)
                        .refval("")
                        .fileVal("")
                        .myStruct(bb -> bb.a(0)
                        ));

        ConfigInstanceUtil.setValues(destination, source);

        FunctionTestConfig result = new FunctionTestConfig(destination);
        assertEquals(-1, result.int_val());
        assertEquals("foo", result.string_val());
        assertEquals(1, result.intarr().size());
        assertEquals(0, result.intarr(0));
        assertEquals(2, result.longarr().size());
        assertEquals(3, result.doublearr().size());
        assertEquals(2344.0, result.doublearr(0), 0.01);
        assertEquals(123.0, result.doublearr(1), 0.01);
        assertEquals(0.0, result.doublearr(2), 0.01);
        assertEquals(-1, result.basicStruct().bar());
        assertEquals("basicFoo", result.basicStruct().foo());
        assertEquals(3, result.basicStruct().intArr().size());
        assertEquals(310, result.basicStruct().intArr(0));
        assertEquals(311, result.basicStruct().intArr(1));
        assertEquals(0, result.basicStruct().intArr(2));
        assertEquals(3, result.myarray().size());
        assertEquals(-1, result.myarray(2).intval());
        assertTrue(result.myarray(2).refval().isEmpty());
        assertTrue(result.myarray(2).fileVal().value().isEmpty());
        assertEquals(0, result.myarray(2).myStruct().a());

    }