public function register()
    {
        if ($this->types !== null) {
            return;
        }

        $types = &Objects::getPropertyValue(Type::class, '_typeObjects', Type::class);

        if ($types instanceof self) {
            $this->types = $types->types;
        } else {
            $this->types = [];

            foreach ($types as $name => $type) {
                $this->addType($type);
            }
        }

        $types = $this;
    }