aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/vendor/symfony/dependency-injection/Compiler/Compiler.php
diff options
context:
space:
mode:
Diffstat (limited to 'srcs/phpmyadmin/vendor/symfony/dependency-injection/Compiler/Compiler.php')
-rw-r--r--srcs/phpmyadmin/vendor/symfony/dependency-injection/Compiler/Compiler.php119
1 files changed, 119 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/vendor/symfony/dependency-injection/Compiler/Compiler.php b/srcs/phpmyadmin/vendor/symfony/dependency-injection/Compiler/Compiler.php
new file mode 100644
index 0000000..14dedf0
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/symfony/dependency-injection/Compiler/Compiler.php
@@ -0,0 +1,119 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\DependencyInjection\Compiler;
+
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Exception\EnvParameterException;
+
+/**
+ * This class is used to remove circular dependencies between individual passes.
+ *
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+class Compiler
+{
+ private $passConfig;
+ private $log = [];
+ private $serviceReferenceGraph;
+
+ public function __construct()
+ {
+ $this->passConfig = new PassConfig();
+ $this->serviceReferenceGraph = new ServiceReferenceGraph();
+ }
+
+ /**
+ * Returns the PassConfig.
+ *
+ * @return PassConfig The PassConfig instance
+ */
+ public function getPassConfig()
+ {
+ return $this->passConfig;
+ }
+
+ /**
+ * Returns the ServiceReferenceGraph.
+ *
+ * @return ServiceReferenceGraph The ServiceReferenceGraph instance
+ */
+ public function getServiceReferenceGraph()
+ {
+ return $this->serviceReferenceGraph;
+ }
+
+ /**
+ * Adds a pass to the PassConfig.
+ *
+ * @param string $type The type of the pass
+ * @param int $priority Used to sort the passes
+ */
+ public function addPass(CompilerPassInterface $pass, $type = PassConfig::TYPE_BEFORE_OPTIMIZATION, int $priority = 0)
+ {
+ $this->passConfig->addPass($pass, $type, $priority);
+ }
+
+ /**
+ * @final
+ */
+ public function log(CompilerPassInterface $pass, string $message)
+ {
+ if (false !== strpos($message, "\n")) {
+ $message = str_replace("\n", "\n".\get_class($pass).': ', trim($message));
+ }
+
+ $this->log[] = \get_class($pass).': '.$message;
+ }
+
+ /**
+ * Returns the log.
+ *
+ * @return array Log array
+ */
+ public function getLog()
+ {
+ return $this->log;
+ }
+
+ /**
+ * Run the Compiler and process all Passes.
+ */
+ public function compile(ContainerBuilder $container)
+ {
+ try {
+ foreach ($this->passConfig->getPasses() as $pass) {
+ $pass->process($container);
+ }
+ } catch (\Exception $e) {
+ $usedEnvs = [];
+ $prev = $e;
+
+ do {
+ $msg = $prev->getMessage();
+
+ if ($msg !== $resolvedMsg = $container->resolveEnvPlaceholders($msg, null, $usedEnvs)) {
+ $r = new \ReflectionProperty($prev, 'message');
+ $r->setAccessible(true);
+ $r->setValue($prev, $resolvedMsg);
+ }
+ } while ($prev = $prev->getPrevious());
+
+ if ($usedEnvs) {
+ $e = new EnvParameterException($usedEnvs, $e);
+ }
+
+ throw $e;
+ } finally {
+ $this->getServiceReferenceGraph()->clear();
+ }
+ }
+}