Chris@0: 0) && Chris@17: ($cache['schema'] == CommandInfo::SERIALIZATION_SCHEMA_VERSION) && Chris@0: self::cachedMethodExists($cache); Chris@0: } Chris@0: Chris@0: public function constructFromCache(CommandInfo $commandInfo, $info_array) Chris@0: { Chris@0: $info_array += $this->defaultSerializationData(); Chris@0: Chris@0: $commandInfo Chris@0: ->setName($info_array['name']) Chris@0: ->replaceRawAnnotations($info_array['annotations']) Chris@0: ->setAliases($info_array['aliases']) Chris@0: ->setHelp($info_array['help']) Chris@0: ->setDescription($info_array['description']) Chris@0: ->replaceExampleUsages($info_array['example_usages']) Chris@0: ->setReturnType($info_array['return_type']) Chris@17: ->setInjectedClasses($info_array['injected_classes']) Chris@0: ; Chris@0: Chris@0: $this->constructDefaultsWithDescriptions($commandInfo->arguments(), (array)$info_array['arguments']); Chris@0: $this->constructDefaultsWithDescriptions($commandInfo->options(), (array)$info_array['options']); Chris@0: } Chris@0: Chris@0: protected function constructDefaultsWithDescriptions(DefaultsWithDescriptions $defaults, $data) Chris@0: { Chris@0: foreach ($data as $key => $info) { Chris@0: $info = (array)$info; Chris@0: $defaults->add($key, $info['description']); Chris@0: if (array_key_exists('default', $info)) { Chris@0: $defaults->setDefaultValue($key, $info['default']); Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: Chris@0: /** Chris@0: * Default data. Everything should be provided during serialization; Chris@0: * this is just as a fallback for unusual circumstances. Chris@0: * @return array Chris@0: */ Chris@0: protected function defaultSerializationData() Chris@0: { Chris@0: return [ Chris@0: 'name' => '', Chris@0: 'description' => '', Chris@0: 'help' => '', Chris@0: 'aliases' => [], Chris@0: 'annotations' => [], Chris@0: 'example_usages' => [], Chris@0: 'return_type' => [], Chris@0: 'parameters' => [], Chris@0: 'arguments' => [], Chris@0: 'options' => [], Chris@17: 'injected_classes' => [], Chris@0: 'mtime' => 0, Chris@0: ]; Chris@0: } Chris@0: }