private function existingPropertyVirtualOrFail(string $propertyName): void
    {
        assert($this->propertyExists($propertyName));
        if (!$this->isExistingPropertyVirtual($propertyName)) {
            throw new NonVirtualPropertyException($propertyName);
        }
    }