package org.timepedia.exporter.client;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Indicates that a class or interface may have Javascript objects automatically
* promoted it its type when such objects are passed as arguments in situations
* where the class type is expected. In the class of a class, the JS object must
* contain properties whose names match java bean or @SType properties of the
* class. Any classes that allow structural types must possess a no-arg
* constructor and be non-final. JavaBean property setters must be non-final.
*
* In the case of interface types, each method in the interface must have
* a corresponding property in the JS object whose value is a JS function. The
* JS object will be automatically promoted to a Java implementation of the
* interface which delegates the method implementations to the bound JS
* functions on the JS object.
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface StructuralType {
}