1: <?php declare(strict_types = 1);
2:
3: namespace PHPStan\Type\Constant;
4:
5: use PHPStan\ShouldNotHappenException;
6: use PHPStan\TrinaryLogic;
7: use PHPStan\Type\Type;
8:
9: /**
10: * @api
11: * @final
12: */
13: class ConstantArrayTypeAndMethod
14: {
15:
16: private function __construct(
17: private ?Type $type,
18: private ?string $method,
19: private TrinaryLogic $certainty,
20: )
21: {
22: }
23:
24: public static function createConcrete(
25: Type $type,
26: string $method,
27: TrinaryLogic $certainty,
28: ): self
29: {
30: if ($certainty->no()) {
31: throw new ShouldNotHappenException();
32: }
33: return new self($type, $method, $certainty);
34: }
35:
36: public static function createUnknown(): self
37: {
38: return new self(null, null, TrinaryLogic::createMaybe());
39: }
40:
41: public function isUnknown(): bool
42: {
43: return $this->type === null;
44: }
45:
46: public function getType(): Type
47: {
48: if ($this->type === null) {
49: throw new ShouldNotHappenException();
50: }
51:
52: return $this->type;
53: }
54:
55: public function getMethod(): string
56: {
57: if ($this->method === null) {
58: throw new ShouldNotHappenException();
59: }
60:
61: return $this->method;
62: }
63:
64: public function getCertainty(): TrinaryLogic
65: {
66: return $this->certainty;
67: }
68:
69: }
70: