private function listMatches(IO $io, array $criteria)
    {
        if (isset($criteria['path']) && isset($criteria['bindingType'])) {
            $matches = array_intersect_key(
                $this->findByPath($criteria['path'], $criteria['language']),
                $this->findByBindingType($criteria['bindingType'])
            );
        } elseif (isset($criteria['path'])) {
            $matches = $this->findByPath($criteria['path'], $criteria['language']);
        } elseif (isset($criteria['bindingType'])) {
            $matches = $this->findByBindingType($criteria['bindingType']);
        } else {
            $matches = $this->findByPath('/*');
        }

        if (isset($criteria['class'])) {
            $shortClass = $criteria['class'];

            $matches = array_filter($matches, function ($value) use ($shortClass) {
                return $value === $shortClass;
            });
        }

        $this->printTable($io, $matches);

        return 0;
    }