import java.util.LinkedList;
import java.util.List;
import org.checkerframework.checker.nullness.qual.*;

/**
 * This class illustrates use of nullness type annotations. The class doesn't do anything -- it is
 * merely meant to be compiled. Compilation will produce no warning messages.
 *
 * <p>There are two related files that differ only slightly: {@link NullnessExample}, an example of
 * correct use, and {@link NullnessExampleWithWarnings}, an example of incorrect use. See the
 * Nullness Checker documentation for larger examples of annotated code.
 */
public class NullnessExample {

    public void example() {

        // In general, you do not have to annotate local variables, because the
        // Nullness Checker infers such annotations.  It is written here in the
        // example for emhpasis.
        @NonNull String foo = "foo";
        @NonNull String bar = "bar";

        foo = bar;
        bar = foo;
    }

    public @NonNull String exampleGenerics() {

        List<@NonNull String> foo = new LinkedList<@NonNull String>();
        List<@NonNull String> bar = foo;

        @NonNull String quux = "quux";
        foo.add(quux);
        foo.add("quux");
        @NonNull String baz = foo.get(0);
        return baz;
    }
}
