code: public void process(ProjectProperties properties, FilterContainer filters, FixedData fixedData, Var2Data varData)
     {
        int filterCount = fixedData.getItemCount();
        boolean[] criteriaType = new boolean[2];
        CriteriaReader criteriaReader = getCriteriaReader();
  
        for (int filterLoop = 0; filterLoop < filterCount; filterLoop++)
        {
           byte[] filterFixedData = fixedData.getByteArrayValue(filterLoop);
           if (filterFixedData == null || filterFixedData.length < 4)
           {
              continue;
           }
  
           Filter filter = new Filter();
           filter.setID(Integer.valueOf(MPPUtility.getInt(filterFixedData, 0)));
           filter.setName(MPPUtility.removeAmpersands(MPPUtility.getUnicodeString(filterFixedData, 4)));
           byte[] filterVarData = varData.getByteArray(filter.getID(), getVarDataType());
           if (filterVarData == null)
           {
              continue;
           }
  
           //System.out.println(ByteArrayHelper.hexdump(filterVarData, true, 16, ""));
           List<GenericCriteriaPrompt> prompts = new LinkedList<GenericCriteriaPrompt>();
  
           filter.setShowRelatedSummaryRows(MPPUtility.getByte(filterVarData, 4) != 0);
           filter.setCriteria(criteriaReader.process(properties, filterVarData, 0, -1, prompts, null, criteriaType));
  
           filter.setIsTaskFilter(criteriaType[0]);
           filter.setIsResourceFilter(criteriaType[1]);
           filter.setPrompts(prompts);
  
           filters.addFilter(filter);
           //System.out.println(filter);
        }
     }
docs: Entry point for processing filter definitions.
  
  @param properties project properties
  @param filters project filters
  @param fixedData filter fixed data
  @param varData filter var data