@Test
  void negative() {
    // negative cases
    check(ids(string.id.isNot("a"))).isEmpty();
    check(ids(string.id.notIn("a", "b"))).isEmpty();
    check(ids(string.id.notIn(Collections.emptyList()))).isEmpty();
    check(ids(string.id.greaterThan("a"))).isEmpty();
    check(ids(string.id.lessThan("a"))).isEmpty();
    check(ids(string.id.between("a", "b"))).isEmpty();

    // not a simple single expression
    check(ids(string.id.is("a").value.is("b"))).isEmpty();
    check(ids(string.id.is("a").or().id.is("b"))).isEmpty();
    check(ids(string.id.is("a").id.is("b"))).isEmpty();
    check(ids(string.id.is("a").id.is("a"))).isEmpty();

    // not ID attribute
    check(ids(string.value.is("a"))).isEmpty();
    check(ids(string.value.in("a", "b"))).isEmpty();
    check(ids(string.value.isNot("a"))).isEmpty();

    check(ids(string.nullable.is("a"))).isEmpty();
    check(ids(string.nullable.in("a", "b"))).isEmpty();
    check(ids(string.nullable.isNot("a"))).isEmpty();
  }
ID should only be extracted for {@code in} and {@code is} operators (not for others)
criteria/geode/test/org/immutables/criteria/geode/KeyLookupAnalyzerTest.java