public static <C, V> void setValue(C target, String path, V value, boolean required, boolean autoConvert) {
int sep = path.indexOf('.');
if (sep < 0)
setLocal(target, path, value, required, autoConvert);
else {
String localName = path.substring(0, sep);
Object subTarget = FeatureAccessor.getValue(target, localName, true);
if (subTarget == null) {
subTarget = setFeatureDefault(target, localName);
}
String remainingName = path.substring(sep + 1);
setValue(subTarget, remainingName, value, required, autoConvert);
}
}