@Override
 public IDomain computeImageDomain(List<IDomain> imageDomains) {
   IDomain rawDomain = computeRawImageDomain(imageDomains);
   for (IDomain domain : imageDomains) {
     // Cannot cast ANY to META
     if (domain.isInstanceOf(IDomain.ANY)) {
       return IDomain.DATE;
     }
     if (domain.isInstanceOf(DomainMetaDomain.META)) {
       return ((IDomainMetaDomain) domain).createMetaDomain(rawDomain);
     }
   }
   //
   return rawDomain;
 }
  @Override
  public List getParametersTypes() {
    List poly = new ArrayList<List>();
    List type = new ArrayList<IDomain>();

    IDomain any = new DomainAny();
    any.setContentAssistLabel("ignored");
    poly.add(type);

    type = new ArrayList<IDomain>();
    type.add(any);
    poly.add(type);

    return poly;
  }
 @Override
 public OperatorDiagnostic validateParameters(List<IDomain> imageDomains) {
   if (imageDomains.isEmpty() || imageDomains.size() <= 1) {
     return new OperatorDiagnostic("invalid NULLIF expression", HINT);
   }
   IDomain domain = imageDomains.get(0);
   for (int i = 1; i < imageDomains.size(); i++) {
     if (imageDomains.get(i).isInstanceOf(domain)) {
       domain = imageDomains.get(i);
     } else if (domain.isInstanceOf(imageDomains.get(i))) {
       // ok
     } else {
       return new OperatorDiagnostic("mismatching NULLIF arguments", HINT);
     }
   }
   return OperatorDiagnostic.IS_VALID;
 }