*/ private array $functions = []; /** * Keyed by class name, including the namespace. * @var array */ private array $classes = []; /** @var array */ private array $interfaces = []; /** @var array */ private array $parents = []; public function putFunction(string $key, FunctionDef $definition): void { $this->functions[$key] = $definition; } public function hasFunction(string $key): bool { return array_key_exists($key, $this->functions); } public function function(string $key): FunctionDef { return $this->functions[$key]; } public function removeFunction(string $key): void { unset($this->functions[$key]); } /** @return array */ public function functions(): array { return $this->functions; } public function putClass(string $key, ClassDef $definition): void { $this->classes[$key] = $definition; } public function hasClass(string $key): bool { return array_key_exists($key, $this->classes); } public function class(string $key): ClassDef { return $this->classes[$key]; } public function findClass(string $key): ?ClassDef { return $this->classes[$key] ?? null; } /** @return array */ public function classes(): array { return $this->classes; } public function putInterface(string $key, InterfaceDef $definition): void { $this->interfaces[$key] = $definition; } public function hasInterface(string $key): bool { return array_key_exists($key, $this->interfaces); } public function interface(string $key): InterfaceDef { return $this->interfaces[$key]; } /** @return array */ public function interfaces(): array { return $this->interfaces; } public function setParent(string $class, string $parent): void { $this->parents[$class] = $parent; } public function parent(string $class): string { return $this->parents[$class] ?? ''; } /** @param array $functions */ public function replaceFunctions(array $functions): void { $this->functions = $functions; } /** @param array $classes */ public function replaceClasses(array $classes): void { $this->classes = $classes; } /** @param array $interfaces */ public function replaceInterfaces(array $interfaces): void { $this->interfaces = $interfaces; } /** @param array $parents */ public function replaceParents(array $parents): void { $this->parents = $parents; } }