/** * Add new class definition * * @param $className * @param string $serviceName * @return ClassBuilderInterface * @throws \InvalidArgumentException * @throws ClassDefinitionAlreadyExistsException */ public function addDefinition($className, string $serviceName = null) : ClassBuilderInterface { // Check if class already exists if ($this->hasDefinition($className)) { throw new ClassDefinitionAlreadyExistsException(); } // Create new definition $classDefinition = new ClassDefinition($this); $classDefinition->setClassName(new ClassReference($className)); if ($serviceName) { $classDefinition->setServiceName($serviceName); } // Register definition $this->definitionCollection[$className] = $classDefinition; return $classDefinition; }