ProjectAres/API/api/src/main/java/tc/oc/api/document/FieldSetter.java

41 lines
1.0 KiB
Java

package tc.oc.api.document;
import java.lang.reflect.Field;
import java.util.concurrent.ExecutionException;
import javax.annotation.Nullable;
import com.google.common.util.concurrent.UncheckedExecutionException;
/**
* Property setter that wraps a field
*/
public class FieldSetter<T> extends FieldAccessor<T> implements Setter<T> {
public FieldSetter(DocumentRegistry registry, Field field) {
super(registry, field);
}
@Override
protected @Nullable Accessor<?> getOverrideIn(DocumentMeta<?> ancestor) {
return ancestor.setters().get(name());
}
@Override
public void setUnchecked(Object obj, T value) {
try {
set(obj, value);
} catch(ExecutionException e) {
throw new UncheckedExecutionException(e.getCause());
}
}
@Override
public void set(Object obj, T value) throws ExecutionException {
try {
member().set(obj, validate(value));
} catch(IllegalAccessException e) {
throw new ExecutionException(e);
}
}
}