001package sting;
002
003import java.lang.annotation.Documented;
004import java.lang.annotation.ElementType;
005import java.lang.annotation.Retention;
006import java.lang.annotation.RetentionPolicy;
007import java.lang.annotation.Target;
008
009/**
010 * Identify a component type that Sting can create by invoking the constructor.
011 * This annotation is a top-level Sting processor entrypoint.
012 *
013 * <p>The type must be concrete and should have a single package-access constructor. The constructor
014 * can accept zero or more services as arguments. Constructor parameters may be qualified with
015 * {@link Named} and can be explicitly annotated with {@link Injector.Input}; otherwise the compiler
016 * will treat the parameter as if it was annotated with a {@link Injector.Input} annotation with
017 * default values for all the elements.</p>
018 *
019 * <p>When this annotation is present, Sting also actively processes {@link Named}, {@link Typed},
020 * and {@link Eager} on the annotated type.</p>
021 */
022@Target( ElementType.TYPE )
023@Retention( RetentionPolicy.RUNTIME )
024@Documented
025public @interface Injectable
026{
027}