import org.checkerframework.checker.interning.qual.Interned;

public class Creation {
  @Interned Foo[] a = new @Interned Foo[22]; // valid

  class Foo {}

  @Interned Foo[] fa_field1 = new @Interned Foo[22]; // valid
  @Interned Foo[] fa_field2 = new @Interned Foo[22]; // valid

  public void test() {
    // :: error: (assignment)
    @Interned Foo f = new Foo(); // error
    Foo g = new Foo(); // valid
    // :: warning: (cast.unsafe.constructor.invocation)
    @Interned Foo h = new @Interned Foo(); // valid
    // :: error: (not.interned)
    boolean b = (f == g); // error

    @Interned Foo[] fa1 = new @Interned Foo[22]; // valid
    @Interned Foo[] fa2 = new @Interned Foo[22]; // valid
  }

  public @Interned Object read_data_0() {
    // :: error: (return)
    return new Object();
  }

  public @Interned Object read_data_1() {
    // :: error: (return)
    return Integer.valueOf(22);
  }

  public @Interned Integer read_data_2() {
    // :: error: (return)
    return Integer.valueOf(22);
  }

  public @Interned Object read_data_3() {
    // :: error: (return)
    return new String("hello");
  }

  public @Interned String read_data_4() {
    // :: error: (return)
    return new String("hello");
  }
}
