summaryrefslogtreecommitdiff
path: root/vendor/phpdocumentor/reflection-common/src/Fqsen.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpdocumentor/reflection-common/src/Fqsen.php')
-rw-r--r--vendor/phpdocumentor/reflection-common/src/Fqsen.php89
1 files changed, 89 insertions, 0 deletions
diff --git a/vendor/phpdocumentor/reflection-common/src/Fqsen.php b/vendor/phpdocumentor/reflection-common/src/Fqsen.php
new file mode 100644
index 000000000..8fc5d3441
--- /dev/null
+++ b/vendor/phpdocumentor/reflection-common/src/Fqsen.php
@@ -0,0 +1,89 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * phpDocumentor
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @link http://phpdoc.org
+ */
+
+namespace phpDocumentor\Reflection;
+
+use InvalidArgumentException;
+use function assert;
+use function end;
+use function explode;
+use function is_string;
+use function preg_match;
+use function sprintf;
+use function trim;
+
+/**
+ * Value Object for Fqsen.
+ *
+ * @link https://github.com/phpDocumentor/fig-standards/blob/master/proposed/phpdoc-meta.md
+ *
+ * @psalm-immutable
+ */
+final class Fqsen
+{
+ /** @var string full quallified class name */
+ private $fqsen;
+
+ /** @var string name of the element without path. */
+ private $name;
+
+ /**
+ * Initializes the object.
+ *
+ * @throws InvalidArgumentException when $fqsen is not matching the format.
+ */
+ public function __construct(string $fqsen)
+ {
+ $matches = [];
+
+ $result = preg_match(
+ //phpcs:ignore Generic.Files.LineLength.TooLong
+ '/^\\\\([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff\\\\]*)?(?:[:]{2}\\$?([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*))?(?:\\(\\))?$/',
+ $fqsen,
+ $matches
+ );
+
+ if ($result === 0) {
+ throw new InvalidArgumentException(
+ sprintf('"%s" is not a valid Fqsen.', $fqsen)
+ );
+ }
+
+ $this->fqsen = $fqsen;
+
+ if (isset($matches[2])) {
+ $this->name = $matches[2];
+ } else {
+ $matches = explode('\\', $fqsen);
+ $name = end($matches);
+ assert(is_string($name));
+ $this->name = trim($name, '()');
+ }
+ }
+
+ /**
+ * converts this class to string.
+ */
+ public function __toString() : string
+ {
+ return $this->fqsen;
+ }
+
+ /**
+ * Returns the name of the element without path.
+ */
+ public function getName() : string
+ {
+ return $this->name;
+ }
+}