- foreach ($arguments as $k => $argument) {
- if ($isRoot) {
- $this->currentId = $k;
- }
- if (is_array($argument)) {
- $arguments[$k] = $this->inlineArguments($container, $argument);
- } elseif ($argument instanceof Reference) {
- if (!$container->hasDefinition($id = (string) $argument)) {
- continue;
- }
-
- if ($this->isInlineableDefinition($id, $definition = $container->getDefinition($id))) {
- $this->compiler->addLogMessage($this->formatter->formatInlineService($this, $id, $this->currentId));
-
- if ($definition->isShared()) {
- $arguments[$k] = $definition;
- } else {
- $arguments[$k] = clone $definition;
- }
- }
- } elseif ($argument instanceof Definition) {
- $argument->setArguments($this->inlineArguments($container, $argument->getArguments()));
- $argument->setMethodCalls($this->inlineArguments($container, $argument->getMethodCalls()));
- $argument->setProperties($this->inlineArguments($container, $argument->getProperties()));
-
- $configurator = $this->inlineArguments($container, array($argument->getConfigurator()));
- $argument->setConfigurator($configurator[0]);
-
- $factory = $this->inlineArguments($container, array($argument->getFactory()));
- $argument->setFactory($factory[0]);
+ if ($value instanceof ArgumentInterface) {
+ // Reference found in ArgumentInterface::getValues() are not inlineable
+ return $value;
+ }
+
+ if ($value instanceof Definition && $this->cloningIds) {
+ if ($value->isShared()) {
+ return $value;