Program: 11102
Project: 11102
Buggy source:
@Override public Object visitMembershipExpression(@NotNull cqlParser.MembershipExpressionContext ctx){
  String operator=ctx.getChild(1).getText();
switch (operator) {
case "String_Node_Str":
    if (ctx.dateTimePrecisionSpecifier() != null) {
      In in=of.createIn().withPrecision(parseDateTimePrecision(ctx.dateTimePrecisionSpecifier().dateTimePrecision().getText())).withOperand(parseExpression(ctx.expression(0)),parseExpression(ctx.expression(1)));
      resolveBinaryCall("String_Node_Str","String_Node_Str",in);
      return in;
    }
 else {
      Expression left=parseExpression(ctx.expression(0));
      Expression right=parseExpression(ctx.expression(1));
      if (right instanceof ValueSetRef) {
        InValueSet in=of.createInValueSet().withCode(left).withValueset((ValueSetRef)right);
        resolveCall("String_Node_Str","String_Node_Str",in,in.getCode().getResultType());
        return in;
      }
      In in=of.createIn().withOperand(left,right);
      return in;
    }
case "String_Node_Str":
  if (ctx.dateTimePrecisionSpecifier() != null) {
    Contains contains=of.createContains().withPrecision(parseDateTimePrecision(ctx.dateTimePrecisionSpecifier().dateTimePrecision().getText())).withOperand(parseExpression(ctx.expression(0)),parseExpression(ctx.expression(1)));
    resolveBinaryCall("String_Node_Str","String_Node_Str",contains);
    return contains;
  }
 else {
    Expression left=parseExpression(ctx.expression(0));
    Expression right=parseExpression(ctx.expression(1));
    if (left instanceof ValueSetRef) {
      InValueSet in=of.createInValueSet().withCode(right).withValueset((ValueSetRef)left);
      resolveCall("String_Node_Str","String_Node_Str",in,in.getCode().getResultType());
      return in;
    }
    Contains contains=of.createContains().withOperand(left,right);
    resolveBinaryCall("String_Node_Str","String_Node_Str",contains);
    return contains;
  }
}
throw new IllegalArgumentException(String.format("String_Node_Str",operator));
}

Fixed version (ground truth):
@Override public Object visitMembershipExpression(@NotNull cqlParser.MembershipExpressionContext ctx){
  String operator=ctx.getChild(1).getText();
switch (operator) {
case "String_Node_Str":
    if (ctx.dateTimePrecisionSpecifier() != null) {
      In in=of.createIn().withPrecision(parseDateTimePrecision(ctx.dateTimePrecisionSpecifier().dateTimePrecision().getText())).withOperand(parseExpression(ctx.expression(0)),parseExpression(ctx.expression(1)));
      resolveBinaryCall("String_Node_Str","String_Node_Str",in);
      return in;
    }
 else {
      Expression left=parseExpression(ctx.expression(0));
      Expression right=parseExpression(ctx.expression(1));
      if (right instanceof ValueSetRef) {
        InValueSet in=of.createInValueSet().withCode(left).withValueset((ValueSetRef)right);
        resolveCall("String_Node_Str","String_Node_Str",in,in.getCode().getResultType());
        return in;
      }
      In in=of.createIn().withOperand(left,right);
      resolveBinaryCall("String_Node_Str","String_Node_Str",in);
      return in;
    }
case "String_Node_Str":
  if (ctx.dateTimePrecisionSpecifier() != null) {
    Contains contains=of.createContains().withPrecision(parseDateTimePrecision(ctx.dateTimePrecisionSpecifier().dateTimePrecision().getText())).withOperand(parseExpression(ctx.expression(0)),parseExpression(ctx.expression(1)));
    resolveBinaryCall("String_Node_Str","String_Node_Str",contains);
    return contains;
  }
 else {
    Expression left=parseExpression(ctx.expression(0));
    Expression right=parseExpression(ctx.expression(1));
    if (left instanceof ValueSetRef) {
      InValueSet in=of.createInValueSet().withCode(right).withValueset((ValueSetRef)left);
      resolveCall("String_Node_Str","String_Node_Str",in,in.getCode().getResultType());
      return in;
    }
    Contains contains=of.createContains().withOperand(left,right);
    resolveBinaryCall("String_Node_Str","String_Node_Str",contains);
    return contains;
  }
}
throw new IllegalArgumentException(String.format("String_Node_Str",operator));
}