import org.checkerframework.checker.testchecker.wholeprograminference.qual.SiblingWithFields;

public class AnnotationWithFieldTest {

  private String fields;

  private String emptyFields;

  void testAnnotationWithFields() {
    fields = getSiblingWithFields();
    // :: warning: (argument)
    expectsSiblingWithFields(fields);
  }

  void testAnnotationWithEmptyFields() {
    emptyFields = getSiblingWithFieldsEmpty();
    // :: warning: (argument)
    expectsSiblingWithEmptyFields(emptyFields);
  }

  void expectsSiblingWithFields(
      @SiblingWithFields(
              value = {"test", "test2"},
              value2 = "test3")
          String s) {}

  void expectsSiblingWithEmptyFields(
      @SiblingWithFields(
              value = {},
              value2 = "")
          String s) {}

  @SuppressWarnings("cast.unsafe")
  String getSiblingWithFields() {
    return (@SiblingWithFields(
            value = {"test", "test2"},
            value2 = "test3")
        String)
        "";
  }

  @SuppressWarnings("cast.unsafe")
  String getSiblingWithFieldsEmpty() {
    return (@SiblingWithFields(
            value = {},
            value2 = "")
        String)
        "";
  }
}
