PmAttrUtil { static boolean isBackingValueWriteable(PmAttrBase<?,?> pmAttr) { MetaData md = getMetaData(pmAttr); if (md.valueAccessStrategy == PmAttrBase.ValueAccessOverride.INSTANCE) { return ClassUtil.findMethods(pmAttr.getClass(), "setBackingValueImpl").size() > 1; } if (md.beanAttrAccessor != null) { return md.beanAttrAccessor.canSet(); } return true; }  @SuppressWarnings("unchecked") static void resetBackingValueToDefault(PmAttr<?>... attr); static void resetBackingValuesToDefault(PmObject rootPm); @SuppressWarnings("unchecked") static boolean isEmptyValue(PmAttr<?> pmAttr, Object value); @SuppressWarnings("unchecked") static T getBackingValue(PmAttr<?> pmAttr); static T_VALUE backingValueToValue(PmAttrBase<T_VALUE, T_BACKING_VALUE> pmAttrCtxt, T_BACKING_VALUE backingValue); static T_BACKING_VALUE valueToBackingValue(PmAttrBase<T_VALUE, T_BACKING_VALUE> pmAttrCtxt, T_VALUE value); static T_VALUE convertStringToValue(PmAttr<T_VALUE> pmAttrCtxt, String s); static String convertValueToString(PmAttr<T_VALUE> pmAttrCtxt, T_VALUE value); @Deprecated static T_VALUE convertBackingValue(PmAttrBase<T_VALUE, T_BACKING_VALUE> pmAttrCtxt, T_BACKING_VALUE backingValue); @Deprecated static T_BACKING_VALUE convertExternalValue(PmAttrBase<T_VALUE, T_BACKING_VALUE> pmAttrCtxt, T_VALUE value);  }
@Test public void testCanWriteBackingValue() { assertEquals(true, PmAttrUtil.isBackingValueWriteable(testPm.i)); assertEquals(true, PmAttrUtil.isBackingValueWriteable(testPm.s)); assertEquals(true, PmAttrUtil.isBackingValueWriteable(testPm.sWithDefault)); assertEquals(false, PmAttrUtil.isBackingValueWriteable((PmAttrBase<?,?>) testPm.calculatedString)); }