package net.ranides.assira.reflection;

import net.ranides.assira.generic.Wrapper;

public interface BeanPropertyBinding<T> extends Wrapper<T> {

    /**
     * Returns object with this property
     *
     * @return object
     */
    Object object();

    /**
     * Returns type of object declaring this property
     *
     * @return IClass
     */
    IClass<?> parent();

    /**
     * Property name, derived from getter & setter name, using various JavaBean conventions.
     * @return string
     */
    String name();

    /**
     * Returns true if property is readable
     *
     * @return bool
     */
    boolean isReadable();

    /**
     * Returns true if property is writable
     *
     * @return bool
     */
    boolean isWritable();

}
