Changeset View
Changeset View
Standalone View
Standalone View
src/ref/simple/ArcanistSimpleSymbolRef.php
- This file was added.
| <?php | |||||
| abstract class ArcanistSimpleSymbolRef | |||||
| extends ArcanistSymbolRef { | |||||
| private $type; | |||||
| const TYPE_ID = 'id'; | |||||
| const TYPE_PHID = 'phid'; | |||||
| final protected function newCacheKeyParts() { | |||||
| return array( | |||||
| sprintf('type(%s)', $this->type), | |||||
| ); | |||||
| } | |||||
| final public function getSymbolType() { | |||||
| return $this->type; | |||||
| } | |||||
| final protected function resolveSymbol($symbol) { | |||||
| $matches = null; | |||||
| $prefix_pattern = $this->getSimpleSymbolPrefixPattern(); | |||||
| $id_pattern = '(^'.$prefix_pattern.'([1-9]\d*)\z)'; | |||||
| $is_id = preg_match($id_pattern, $symbol, $matches); | |||||
| if ($is_id) { | |||||
| $this->type = self::TYPE_ID; | |||||
| return (int)$matches[1]; | |||||
| } | |||||
| $phid_type = $this->getSimpleSymbolPHIDType(); | |||||
| $phid_type = preg_quote($phid_type); | |||||
| $phid_pattern = '(^PHID-'.$phid_type.'-\S+\z)'; | |||||
| $is_phid = preg_match($phid_pattern, $symbol, $matches); | |||||
| if ($is_phid) { | |||||
| $this->type = self::TYPE_PHID; | |||||
| return $matches[0]; | |||||
| } | |||||
| throw new PhutilArgumentUsageException( | |||||
| pht( | |||||
| 'The format of symbol "%s" is unrecognized. Expected a '. | |||||
| 'monogram like "X123", or an ID like "123", or a PHID.', | |||||
| $symbol)); | |||||
| } | |||||
| abstract protected function getSimpleSymbolPrefixPattern(); | |||||
| abstract protected function getSimpleSymbolPHIDType(); | |||||
| abstract public function getSimpleSymbolConduitSearchMethodName(); | |||||
| abstract public function getSimpleSymbolInspectFunctionName(); | |||||
| public function getSimpleSymbolConduitSearchAttachments() { | |||||
| return array(); | |||||
| } | |||||
| } | |||||