@Override
 public Object visit(PropertyIsNull filter, Object extraData) {
   checkExpressionIsProperty(filter.getExpression());
   StringWriter output = asStringWriter(extraData);
   ExpressionToSolr visitor = new ExpressionToSolr();
   PropertyName propertyName = (PropertyName) filter.getExpression();
   output.append("-");
   propertyName.accept(visitor, output);
   output.append(":[* TO *]");
   return output;
 }
  @Test
  public void testNullFilter() throws Exception {
    PropertyIsNull nullFilter = ff.isNull(ff.property("measurement/result"));

    Filter unrolled = (Filter) nullFilter.accept(visitor, null);
    assertTrue(unrolled instanceof PropertyIsNull);
    assertNotSame(nullFilter, unrolled);

    PropertyIsNull unmapped = (PropertyIsNull) unrolled;
    Expression unmappedAtt = unmapped.getExpression();
    assertTrue(unmappedAtt instanceof PropertyName);
    assertEquals("results_value", ((PropertyName) unmappedAtt).getPropertyName());
  }
  public Object visit(PropertyIsNull filter, Object notUsed) {
    if (original == null) original = filter;

    if (!fcs.supports(PropertyIsNull.class)) {
      postStack.push(filter);

      return null;
    }

    int i = postStack.size();
    ((PropertyIsNull) filter).getExpression().accept(this, null);

    if (i < postStack.size()) {
      postStack.pop();
      postStack.push(filter);
    }

    preStack.pop(); // null
    preStack.push(filter);

    return null;
  }
 public Object visit(PropertyIsNull filter, Object notUsed) {
   return visitNullNil(filter, filter.getExpression());
 }