-
-
Notifications
You must be signed in to change notification settings - Fork 138
/
ClassLike.php
130 lines (92 loc) · 2.5 KB
/
ClassLike.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?php
/**
* This file is part of the Nette Framework (https://nette.org)
* Copyright (c) 2004 David Grudl (https://davidgrudl.com)
*/
declare(strict_types=1);
namespace Nette\PhpGenerator;
use Nette;
/**
* Class/Interface/Trait/Enum description.
*/
abstract class ClassLike
{
use Traits\CommentAware;
use Traits\AttributeAware;
public const
VisibilityPublic = 'public',
VisibilityProtected = 'protected',
VisibilityPrivate = 'private';
/** @deprecated use ClassLike::VisibilityPublic */
public const VISIBILITY_PUBLIC = self::VisibilityPublic;
/** @deprecated use ClassLike::VisibilityProtected */
public const VISIBILITY_PROTECTED = self::VisibilityProtected;
/** @deprecated use ClassLike::VisibilityPrivate */
public const VISIBILITY_PRIVATE = self::VisibilityPrivate;
private ?PhpNamespace $namespace;
private ?string $name;
public static function from(string|object $class, bool $withBodies = false): self
{
return (new Factory)
->fromClassReflection(new \ReflectionClass($class), $withBodies);
}
public static function fromCode(string $code): self
{
return (new Factory)
->fromClassCode($code);
}
public function __construct(string $name, ?PhpNamespace $namespace = null)
{
$this->setName($name);
$this->namespace = $namespace;
}
public function __toString(): string
{
return (new Printer)->printClass($this, $this->namespace);
}
/** @deprecated an object can be in multiple namespaces */
public function getNamespace(): ?PhpNamespace
{
return $this->namespace;
}
public function setName(?string $name): static
{
if ($name !== null && (!Helpers::isIdentifier($name) || isset(Helpers::Keywords[strtolower($name)]))) {
throw new Nette\InvalidArgumentException("Value '$name' is not valid class name.");
}
$this->name = $name;
return $this;
}
public function getName(): ?string
{
return $this->name;
}
public function isClass(): bool
{
return $this instanceof ClassType;
}
public function isInterface(): bool
{
return $this instanceof InterfaceType;
}
public function isTrait(): bool
{
return $this instanceof TraitType;
}
public function isEnum(): bool
{
return $this instanceof EnumType;
}
/** @param string[] $names */
protected function validateNames(array $names): void
{
foreach ($names as $name) {
if (!Helpers::isNamespaceIdentifier($name, allowLeadingSlash: true)) {
throw new Nette\InvalidArgumentException("Value '$name' is not valid class name.");
}
}
}
public function validate(): void
{
}
}