final protected function _getPropertyDefinition(
        $propName,
        $allowUndefined = true)
    {
        if (isset($this->_compiledPropertyMapLink[$propName])) {
            // Custom class property definition exists, so use that. Properties
            // defined in the class map are always valid even if not in data!
            return $this->_compiledPropertyMapLink[$propName];
        } elseif ($allowUndefined && array_key_exists($propName, $this->_objectData)) {
            // No property definition exists, but the property exists in the
            // object instance's data, so treat it as undefined & untyped.
            return UndefinedProperty::getInstance();
        } else {
            // There is no definition & no object instance data (or disallowed)!
            throw new LazyJsonMapperException(sprintf(
                'No such object property "%s".',
                $propName
            ));
        }
    }