<?php

namespace Xentral\Core\DependencyInjection\Definition;

use Xentral\Core\DependencyInjection\Exception\InvalidArgumentException;

final class FactoryMethodDefinition
{
    /** @var callable $callable */
    private $callable;

    /** @var bool $shared Share the same instance? */
    private $shared;

    /**
     * @param callable $callable
     * @param bool     $shared
     *
     * @throws InvalidArgumentException
     */
    public function __construct($callable, $shared = true)
    {
        if (!is_callable($callable, false)) {
	/*
	
	OpenXE-todo
	unknown compatibility issue
	commented out as hotfix

            throw new InvalidArgumentException(sprintf(
                'Definition can\'t be created. "%s::%s" is not callable.', $callable[0], $callable[1]
            ));
	*/
        }

        $this->callable = $callable;
        $this->shared = (bool)$shared;
    }

    /**
     * @return callable
     */
    public function getCallable()
    {
        return $this->callable;
    }

    /**
     * @return bool
     */
    public function isShared()
    {
        return $this->shared;
    }
}