code: public function getMatchingIds()
      {
          if ($this->arrMatches !== null) {
              return $this->arrMatches;
          }
  
          $arrIds = null;
          foreach ($this->arrFilterRules as $objFilterRule) {
              /** @var IFilterRule $objFilterRule */
              $arrRuleIds = $objFilterRule->getMatchingIds();
              if ($arrRuleIds === null) {
                  continue;
              }
              // The first rule determines the master ids.
              if ($arrIds === null) {
                  $arrIds = $arrRuleIds;
              } else {
                  // NOTE: all rules are implicitely "AND"-ed together.
                  $arrIds = array_intersect($arrIds, $arrRuleIds);
                  // When no ids are left any more, the result will stay empty, do not evaluate any further rules.
                  if (count($arrIds) == 0) {
                      break;
                  }
              }
          }
          $this->arrMatches = $arrIds;
  
          return $arrIds;
      }
docs: {@inheritdoc}