function setProps (array $props = null)
  {
    if ($this->propsClass) {
      if (!class_exists ($this->propsClass, false)) {
        $this->context
          ->getMacrosService ()
          ->setupMacroProperties ($this->propsClass, $this->templateUrl, function () {
            $this->createView ();
            // Return the Macro instance.
            return $this->getShadowDOM ()->getFirstChild ();
          });
      }
      $this->props = new $this->propsClass ($this);
      if ($props)
        $this->props->apply ($props);
    }
    elseif ($props)
      throw new ComponentException($this, 'This component does not support properties.');
  }