protected function compileBuilder(ContainerBuilder $builder, $proxyCachePath = NULL, array $additionalProxies = [])
	{
		$imports = [
			DelegateBinding::class,
			ContextLookupException::class,
			InjectionPoint::class,
			InjectionPointInterface::class
		];
		
		$code = '<?php' . "\n\n";
		$code .= 'namespace ' . $this->namespace . " {\n";
		
		foreach($imports as $typeName)
		{
			$code .= "\nuse " . ltrim($typeName, '\\') . ";";
		}
		
		if(!empty($imports))
		{
			$code .= "\n";
		}
		
		$code .= "\nfinal class {$this->typeName} extends \KoolKode\Context\CompiledContainer {\n\n";
		
		$bindings = $builder->getBindings();
		$marked = [];
		
		// Write bound properties:
		
		$bound = [];
		
		foreach($bindings as $binding)
		{
			$bound[$binding->getTypeName()] = true;
		}
		
		$code .= "\tprotected \$bound = " . var_export($bound, true) . ";\n";
		
		foreach($bindings as $binding)
		{
			foreach($binding->getMarkers() as $marker)
			{
				$marked[get_class($marker)][(string)$binding] = $binding;
			}
			
			$code .= $this->compileBinding($binding);
		}
		
		$code .= $this->compileMarkerLookup($marked);
		
		foreach($this->methods as $method)
		{
			$code .= "\n\n" . $method . "\n";
		}
		
		if($proxyCachePath !== NULL)
		{
			$code .= $this->compileScopedProxies($builder, $proxyCachePath, $additionalProxies);
		}
		
		$code .= "}\n\n";
		$code .= "}\n\n";
		
		return $code;
	}
protected function compileBuilder(ContainerBuilder $builder, $proxyCachePath = NULL, array $additionalProxies = [])
	{
		$imports = [
			DelegateBinding::class,
			ContextLookupException::class,
			InjectionPoint::class,
			InjectionPointInterface::class
		];
		
		$code = '<?php' . "\n\n";
		$code .= 'namespace ' . $this->namespace . " {\n";
		
		foreach($imports as $typeName)
		{
			$code .= "\nuse " . ltrim($typeName, '\\') . ";";
		}
		
		if(!empty($imports))
		{
			$code .= "\n";
		}
		
		$code .= "\nfinal class {$this->typeName} extends \KoolKode\Context\CompiledContainer {\n\n";
		
		$bindings = $builder->getBindings();
		$marked = [];
		
		// Write bound properties:
		
		$bound = [];
		
		foreach($bindings as $binding)
		{
			$bound[$binding->getTypeName()] = true;
		}
		
		$code .= "\tprotected \$bound = " . var_export($bound, true) . ";\n";
		
		foreach($bindings as $binding)
		{
			foreach($binding->getMarkers() as $marker)
			{
				$marked[get_class($marker)][(string)$binding] = $binding;
			}
			
			$code .= $this->compileBinding($binding);
		}
		
		$code .= $this->compileMarkerLookup($marked);
		
		foreach($this->methods as $method)
		{
			$code .= "\n\n" . $method . "\n";
		}
		
		if($proxyCachePath !== NULL)
		{
			$code .= $this->compileScopedProxies($builder, $proxyCachePath, $additionalProxies);
		}
		
		$code .= "}\n\n";
		$code .= "}\n\n";
		
		return $code;
	}
protected function compileBuilder ( ContainerBuilder $ builder , $ proxyCachePath = NULL , array $ additionalProxies = [ ] ) { $ imports = [ DelegateBinding :: class , ContextLookupException :: class , InjectionPoint :: class , InjectionPointInterface :: class ] ; $ code = '<?php' . "\n\n" ; $ code .= 'namespace ' . $ this -> namespace . " {\n" ; foreach ( $ imports as $ typeName ) { $ code .= "\nuse " . ltrim ( $ typeName , '\\' ) . ";" ; } if ( ! empty ( $ imports ) ) { $ code .= "\n" ; } $ code .= "\nfinal class {$this->typeName} extends \KoolKode\Context\CompiledContainer {\n\n" ; $ bindings = $ builder -> getBindings ( ) ; $ marked = [ ] ; // Write bound properties: $ bound = [ ] ; foreach ( $ bindings as $ binding ) { $ bound [ $ binding -> getTypeName ( ) ] = true ; } $ code .= "\tprotected \$bound = " . var_export ( $ bound , true ) . ";\n" ; foreach ( $ bindings as $ binding ) { foreach ( $ binding -> getMarkers ( ) as $ marker ) { $ marked [ get_class ( $ marker ) ] [ ( string ) $ binding ] = $ binding ; } $ code .= $ this -> compileBinding ( $ binding ) ; } $ code .= $ this -> compileMarkerLookup ( $ marked ) ; foreach ( $ this -> methods as $ method ) { $ code .= "\n\n" . $ method . "\n" ; } if ( $ proxyCachePath !== NULL ) { $ code .= $ this -> compileScopedProxies ( $ builder , $ proxyCachePath , $ additionalProxies ) ; } $ code .= "}\n\n" ; $ code .= "}\n\n" ; return $ code ; }
Compiles the given container builder and takes care of scoped proxy generation.

@param ContainerBuilder $builder
@param string $proxyCachePath
@param array<string> $additionalProxies
@return string
Compiles the given container builder and takes care of scoped proxy generation .