getPhobjectClassConstant('EXTENSIONKEY'); } abstract public function getExtensionName(); public function discoverLinkedObjects( PhabricatorCacheEngine $engine, array $objects) { return array(); } public function deleteCaches( PhabricatorCacheEngine $engine, array $objects) { return null; } final public static function getAllExtensions() { return id(new PhutilClassMapQuery()) ->setAncestorClass(self::class) ->setUniqueMethod('getExtensionKey') ->execute(); } final public function selectObjects(array $objects, $class_name) { $results = array(); foreach ($objects as $phid => $object) { if ($object instanceof $class_name) { $results[$phid] = $object; } } return $results; } }