import java.util.Collection;
import org.checkerframework.checker.regex.qual.Regex;

class TypeParamSubtype {
    // These are legal because null has type @Regex String
    // <T extends @Regex String> void nullRegexSubtype(Collection<T> col) {
    //     // :: error: (argument.type.incompatible)
    //     col.add(null);
    // }
    //
    // <T extends String> void nullSimpleSubtype(Collection<T> col) {
    //     // :: error: (argument.type.incompatible)
    //     col.add(null);
    // }

    <T extends @Regex String, U extends T> void nullRegexSubtype(Collection<T> col, U u) {
        col.add(u);
    }

    <T extends String, U extends T> void nullSimpleSubtype(Collection<T> col, U u) {
        col.add(u);
    }
}
