// Test case for issue #574: https://github.com/typetools/checker-framework/issues/574

import org.checkerframework.checker.initialization.qual.UnderInitialization;

@SuppressWarnings({
  // A warning is issued that fields are not initialized in the constructor.
  // That is expected and it is not what is being verified in this test.
  "initialization.field.uninitialized",
  // Normally @UnknownInitialization is the only initialization annotation allowed on fields.
  // However, for the purposes of this test, fields must be annotated with @UnderInitialization.
  "initialization.field.type"
})
public class Issue574 {
  @UnderInitialization(Object.class) Object o1;

  @UnderInitialization(String.class) Object o2;

  @UnderInitialization(Character.class) Object o3;

  @UnderInitialization(Number.class) Object o4;

  @UnderInitialization(Double.class) Object o5;

  @UnderInitialization(Integer.class) Object o6;

  @UnderInitialization(CharSequence.class) Object i1; // CharSequence is an interface

  void testLubOfClasses(boolean flag) {
    @UnderInitialization(Object.class) Object l1 = flag ? o2 : o3;
    @UnderInitialization(Number.class) Object l2 = flag ? o5 : o6;

    @UnderInitialization(Object.class) Object l3 = flag ? o1 : o2;
    @UnderInitialization(Object.class) Object l4 = flag ? o1 : o3;

    @UnderInitialization(Number.class) Object l5 = flag ? o4 : o5;
    @UnderInitialization(Number.class) Object l6 = flag ? o4 : o6;

    // :: error: (assignment)
    @UnderInitialization(Character.class) Object l7 = flag ? o1 : o2;
    // :: error: (assignment)
    @UnderInitialization(Integer.class) Object l8 = flag ? o4 : o5;
  }

  void testLubOfClassesAndInterfaces(boolean flag) {
    @UnderInitialization(Object.class) Object l1 = flag ? i1 : o3;

    @UnderInitialization(Object.class) Object l2 = flag ? o1 : i1;
    @UnderInitialization(Object.class) Object l3 = flag ? o1 : o3;

    // :: error: (assignment)
    @UnderInitialization(Character.class) Object l4 = flag ? o1 : i1;
  }
}
