in java/fury-core/src/main/java/org/apache/fury/builder/CodecBuilder.java [340:377]
protected Expression setFieldValue(Expression bean, Descriptor d, Expression value) {
String fieldName = d.getName();
if (value instanceof Inlineable) {
((Inlineable) value).inline();
}
if (duplicatedFields.contains(fieldName) || !sourcePublicAccessible(beanClass)) {
return unsafeSetField(bean, d, value);
}
if (!d.isFinalField()
&& Modifier.isPublic(d.getModifiers())
&& Modifier.isPublic(d.getRawType().getModifiers())) {
return new Expression.SetField(bean, fieldName, value);
} else if (d.getWriteMethod() != null && Modifier.isPublic(d.getWriteMethod().getModifiers())) {
return new Invoke(bean, d.getWriteMethod().getName(), value);
} else {
if (!d.isFinalField() && !Modifier.isPrivate(d.getModifiers())) {
if (AccessorHelper.defineSetter(d.getField())) {
Class<?> accessorClass = AccessorHelper.getAccessorClass(d.getField());
if (!value.type().equals(d.getTypeRef())) {
value = new Cast(value, d.getTypeRef());
}
return new StaticInvoke(
accessorClass, d.getName(), PRIMITIVE_VOID_TYPE, false, bean, value);
}
}
if (d.getWriteMethod() != null && !Modifier.isPrivate(d.getWriteMethod().getModifiers())) {
if (AccessorHelper.defineSetter(d.getWriteMethod())) {
Class<?> accessorClass = AccessorHelper.getAccessorClass(d.getWriteMethod());
if (!value.type().equals(d.getTypeRef())) {
value = new Cast(value, d.getTypeRef());
}
return new StaticInvoke(
accessorClass, d.getWriteMethod().getName(), PRIMITIVE_VOID_TYPE, false, bean, value);
}
}
return unsafeSetField(bean, d, value);
}
}