package org.bytedeco.javacpp.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.bytedeco.javacpp.tools.Generator;
/**
* An annotation indicating that a method should behave like a member setter.
* However, a pair of methods with the same name, where the return value type of
* the one short by a parameter equals the type of the extra parameter of the other,
* whose return value type is {@code void} or of the enclosing class, are recognized
* as a member getter/setter pair even without annotation. This behavior can be
* changed by annotating the methods with the {@link Function} annotation.
* <p>
* A member setter must return no value, or an object of its own {@link Class},
* while its number of parameters must be greater than 0. The assigned value is
* assumed to be a member variable, but anything that follows the same syntax as
* the assignment of a member variable could potentially work with this annotation.
* All but the last argument are considered as indices to access a member array.
*
* @see Generator
*
* @author Samuel Audet
*/
@Documented @Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface MemberSetter { }