package bugIdeas;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.sql.ResultSet;

import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.annotation.meta.TypeQualifier;
import javax.annotation.meta.TypeQualifierNickname;
import javax.annotation.meta.When;

public class Ideas_2013_01_29 {

    @Documented
    @TypeQualifier
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Foo {
        When when() default When.ALWAYS;
    }

    @Foo(when = When.NEVER)
    @TypeQualifierNickname
    public @interface NotFoo { }

    @Foo(when = When.MAYBE)
    @TypeQualifierNickname
    public @interface MaybeFoo { }

    int foobar() {
        return ResultSet.CLOSE_CURSORS_AT_COMMIT;
    }

    @NotFoo Object test1(@Foo Object x) {
        return x;
    }

    @Foo Object test2(@MaybeFoo Object x, boolean b) {
        if (b) System.out.println("b");
        return x;
    }
    @Foo Object test2(@MaybeFoo Object x, @Foo Object y, boolean b) {
        if (b) return y;
        return x;
    }

    @Nonnull Object testNullness(@CheckForNull Object x, boolean b) {
        if (b)
            System.out.println("b");
        return x;
    }
    @Nonnull Object testNullness(@CheckForNull Object x, @Foo Object y, boolean b) {
        if (b) return y;
        return x;
    }


}