[note] The «!product» stereotype on a Property variable typed by an Interface indicates that a concrete implementation Class is supplied for it by a factory.

From OoeBridge:

   * @var \Drupal\ooe\Block\IBlock
  private $block_demo;
   * @return \Drupal\ooe\Block\IBlock
   *   Lazily creates a demo block.
  protected function block_demo() {
    if (empty($this->block_demo)) {
      $this->block_demo = $this->factory()->newBlock(
          $this->getModule() . "_block_demo", $this->getModuleDisplayName() . ': Demo block');
    return $this->block_demo;


For an explanation please read: MagicDraw UML: does not permit drawing a Dependency (or Usage) from a Property name symbol or line end of an Association, makes it hard to indicate a chosen implementation Class. Workaround: draw from Property symbol in composite structure compartment..

Note applies to ...
Visit also