PropertyCreationHelper { public static <T> Property<T> createFromNonOptional( @NotNull final Function<Object, T> getter, @NotNull final BiConsumer<Object, T> setter, @NotNull final boolean requiresDataContext) { Validate.notNull(getter); Validate.notNull(setter); return create(Optional.of(getter), Optional.of(setter), requiresDataContext); } private  PropertyCreationHelper(); static Property<T> createFromStaticValue(@Nullable T value); static Property<T> createFromOptional(
      @Nullable final Function<Object, T> getter,
      @Nullable final BiConsumer<Object, T> setter,
      @NotNull final boolean requiresDataContext); static Property<T> create(
      @NotNull final Optional<Function<Object, T>> getter,
      @NotNull final Optional<BiConsumer<Object, T>> setter,
      @NotNull final boolean requiresDataContext); static Property<T> createFromNonOptional(
      @NotNull final Function<Object, T> getter,
      @NotNull final BiConsumer<Object, T> setter,
      @NotNull final boolean requiresDataContext); static Property<T> createFromName(@NotNull final Optional<String> getSetMethodName); @SuppressWarnings({"OptionalUsedAsFieldOrParameterType", "unchecked"}) static Property<T> createFromName(
      @NotNull final Optional<String> getMethodName,
      @NotNull final Optional<String> setMethodName);  }
@Test public void createFromNonOptionalSuccessful() { final DummyTestTarget testTarget = new DummyTestTarget(); final Property<String> bothSet = PropertyCreationHelper.createFromNonOptional(o -> testTarget.getValueOne(), (o, s) -> testTarget.setValueOne(s), false); Assert.assertFalse(bothSet instanceof StaticValueProperty); Assert.assertEquals("One", bothSet.apply(new Object()).get()); bothSet.accept(new Object(), "Set"); Assert.assertEquals("Set", testTarget.getValueOne()); }
@Test(expected = NullPointerException.class) public void createFromNonOptionalFailureGetter() { final DummyTestTarget testTarget = new DummyTestTarget(); final Property<String> getterNoneNull = PropertyCreationHelper.createFromNonOptional(o -> testTarget.getValueOne(), null, false); fail(); }
@Test(expected = NullPointerException.class) public void createFromNonOptionalFailureSetter() { final DummyTestTarget testTarget = new DummyTestTarget(); final Property<String> setterNoneNull = PropertyCreationHelper.createFromNonOptional(null, (c, o) -> testTarget.setValueOne(o), false); fail(); }