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

public class ConstantsInterning {

  // All but D should be inferred to be @Interned String.
  final String A = "A";
  final String B = "B";
  final String AB = A + B;
  final String AC = A + "C";
  final String D = new String("D");
  final @Interned String E = new String("E").intern();
  final Object F = "F";

  void foo() {
    @Interned String is;
    is = A;
    is = B;
    is = AB;
    is = A + B;
    is = AC;
    is = A + "C";
    is = A + B + "C";
    // :: error: (assignment)
    is = D;
    // :: error: (assignment)
    is = A + E;
    // :: error: (assignment)
    is = is + is;
    is = Constants2.E;
    is = (String) F;
  }
}

class Constants2 {
  public static final String E = "e";
}
