From 967c9b5a9359613f6eed462927ad19fd57892eb8 Mon Sep 17 00:00:00 2001 From: Daniil Gentili Date: Sat, 3 Oct 2020 12:36:08 +0200 Subject: [PATCH] Improvements for static typing --- .../MadelineProto/AnnotationsBuilder.php | 24 +++++++++++++++ src/danog/MadelineProto/Connection.php | 30 ++++--------------- src/danog/MadelineProto/ContextConnector.php | 6 ++-- src/danog/MadelineProto/DataCenter.php | 7 +++-- .../MadelineProto/DataCenterConnection.php | 10 +++---- .../MadelineProto/Db/ArrayCacheTrait.php | 5 ++++ src/danog/MadelineProto/Db/DriverArray.php | 5 ++++ .../MadelineProto/MTProtoSession/Session.php | 2 ++ .../MTProtoTools/PasswordCalculator.php | 2 +- src/danog/MadelineProto/Tools.php | 7 ++++- src/danog/MadelineProto/Wrappers/Events.php | 2 +- src/danog/MadelineProto/Wrappers/Start.php | 9 ++++-- 12 files changed, 69 insertions(+), 40 deletions(-) diff --git a/src/danog/MadelineProto/AnnotationsBuilder.php b/src/danog/MadelineProto/AnnotationsBuilder.php index 4c382119..c42ca892 100644 --- a/src/danog/MadelineProto/AnnotationsBuilder.php +++ b/src/danog/MadelineProto/AnnotationsBuilder.php @@ -27,6 +27,30 @@ use phpDocumentor\Reflection\DocBlockFactory; class AnnotationsBuilder { + /** + * Reflection classes + */ + private array $reflectionClasses = []; + /** + * Logger + */ + private Logger $logger; + /** + * Namespace + */ + private string $namespace; + /** + * TL instance + */ + private TL $TL; + /** + * Settings + */ + private array $settings; + /** + * Output file + */ + private string $output; public function __construct(Logger $logger, array $settings, string $output, array $reflectionClasses, string $namespace) { $this->reflectionClasses = $reflectionClasses; diff --git a/src/danog/MadelineProto/Connection.php b/src/danog/MadelineProto/Connection.php index fef8f4d4..82600649 100644 --- a/src/danog/MadelineProto/Connection.php +++ b/src/danog/MadelineProto/Connection.php @@ -101,9 +101,9 @@ class Connection extends Session /** * Date of last chunk received. * - * @var integer + * @var float */ - private $lastChunk = 0; + private float $lastChunk = 0; /** * Logger instance. * @@ -166,24 +166,6 @@ class Connection extends Session { return $this->needsReconnect; } - /** - * Check if the socket is writing stuff. - * - * @return boolean - */ - public function isWriting(): bool - { - return $this->writing; - } - /** - * Check if the socket is reading stuff. - * - * @return boolean - */ - public function isReading(): bool - { - return $this->reading; - } /** * Set writing boolean. * @@ -191,7 +173,7 @@ class Connection extends Session * * @return void */ - public function writing(bool $writing) + public function writing(bool $writing): void { $this->shared->writing($writing, $this->id); } @@ -202,7 +184,7 @@ class Connection extends Session * * @return void */ - public function reading(bool $reading) + public function reading(bool $reading): void { $this->shared->reading($reading, $this->id); } @@ -218,9 +200,9 @@ class Connection extends Session /** * Get the receive date of the latest chunk of data from the socket. * - * @return int + * @return float */ - public function getLastChunk(): int + public function getLastChunk(): float { return $this->lastChunk; } diff --git a/src/danog/MadelineProto/ContextConnector.php b/src/danog/MadelineProto/ContextConnector.php index d53b5ab2..92b9e154 100644 --- a/src/danog/MadelineProto/ContextConnector.php +++ b/src/danog/MadelineProto/ContextConnector.php @@ -37,10 +37,10 @@ class ContextConnector implements Connector $this->fromDns = $fromDns; $this->logger = $dataCenter->getAPI()->getLogger(); } - public function connect(string $uri, ?ConnectContext $ctx = null, ?CancellationToken $token = null): Promise + public function connect(string $uri, ?ConnectContext $context = null, ?CancellationToken $token = null): Promise { - return Tools::call((function () use ($uri, $ctx, $token): \Generator { - $ctx = $ctx ?? new ConnectContext(); + return Tools::call((function () use ($uri, $context, $token): \Generator { + $ctx = $context ?? new ConnectContext(); $token = $token ?? new NullCancellationToken(); $ctxs = $this->dataCenter->generateContexts(0, $uri, $ctx); if (empty($ctxs)) { diff --git a/src/danog/MadelineProto/DataCenter.php b/src/danog/MadelineProto/DataCenter.php index 1b034d19..d6fb6cf1 100644 --- a/src/danog/MadelineProto/DataCenter.php +++ b/src/danog/MadelineProto/DataCenter.php @@ -62,7 +62,7 @@ class DataCenter /** * All socket connections to DCs. * - * @var array + * @var array */ public $sockets = []; /** @@ -138,11 +138,12 @@ class DataCenter $array = []; foreach ($this->sockets as $id => $socket) { if ($socket instanceof \danog\MadelineProto\Connection) { - if ($socket->temp_auth_key) { + if (isset($socket->temp_auth_key) && $socket->temp_auth_key) { $array[$id]['tempAuthKey'] = $socket->temp_auth_key; } - if ($socket->auth_key) { + if (isset($socket->auth_key) && $socket->auth_key) { $array[$id]['permAuthKey'] = $socket->auth_key; + /** @psalm-suppress UndefinedPropertyFetch */ $array[$id]['permAuthKey']['authorized'] = $socket->authorized; } } diff --git a/src/danog/MadelineProto/DataCenterConnection.php b/src/danog/MadelineProto/DataCenterConnection.php index 07768cad..157618ff 100644 --- a/src/danog/MadelineProto/DataCenterConnection.php +++ b/src/danog/MadelineProto/DataCenterConnection.php @@ -179,7 +179,7 @@ class DataCenterConnection implements JsonSerializable * * @return void */ - public function setAuthKey(?AuthKey $key, bool $temp = true) + public function setAuthKey(?AuthKey $key, bool $temp = true): void { $this->{$temp ? 'tempAuthKey' : 'permAuthKey'} = $key; } @@ -226,9 +226,9 @@ class DataCenterConnection implements JsonSerializable * * @return void */ - public function setTempAuthKey(?TempAuthKey $key) + public function setTempAuthKey(?TempAuthKey $key): void { - return $this->setAuthKey($key, true); + $this->setAuthKey($key, true); } /** * Set permanent authorization key. @@ -237,9 +237,9 @@ class DataCenterConnection implements JsonSerializable * * @return void */ - public function setPermAuthKey(?PermAuthKey $key) + public function setPermAuthKey(?PermAuthKey $key): void { - return $this->setAuthKey($key, false); + $this->setAuthKey($key, false); } /** * Bind temporary and permanent auth keys. diff --git a/src/danog/MadelineProto/Db/ArrayCacheTrait.php b/src/danog/MadelineProto/Db/ArrayCacheTrait.php index 5649a929..a6afdfb0 100644 --- a/src/danog/MadelineProto/Db/ArrayCacheTrait.php +++ b/src/danog/MadelineProto/Db/ArrayCacheTrait.php @@ -5,6 +5,11 @@ namespace danog\MadelineProto\Db; use Amp\Loop; use danog\MadelineProto\Logger; +/** + * Array caching trait + * + * @property string $table + */ trait ArrayCacheTrait { /** diff --git a/src/danog/MadelineProto/Db/DriverArray.php b/src/danog/MadelineProto/Db/DriverArray.php index 5f0039c0..51599271 100644 --- a/src/danog/MadelineProto/Db/DriverArray.php +++ b/src/danog/MadelineProto/Db/DriverArray.php @@ -6,6 +6,11 @@ use danog\MadelineProto\Logger; use danog\MadelineProto\SettingsAbstract; use ReflectionClass; +/** + * Array caching trait + * + * @property string $table + */ abstract class DriverArray implements DbArray { use ArrayCacheTrait; diff --git a/src/danog/MadelineProto/MTProtoSession/Session.php b/src/danog/MadelineProto/MTProtoSession/Session.php index 431e04a9..ec844bc0 100644 --- a/src/danog/MadelineProto/MTProtoSession/Session.php +++ b/src/danog/MadelineProto/MTProtoSession/Session.php @@ -19,6 +19,8 @@ namespace danog\MadelineProto\MTProtoSession; +use danog\MadelineProto\MTProto; + /** * Manages MTProto session-specific data. * diff --git a/src/danog/MadelineProto/MTProtoTools/PasswordCalculator.php b/src/danog/MadelineProto/MTProtoTools/PasswordCalculator.php index 78bdc8ff..132673ce 100644 --- a/src/danog/MadelineProto/MTProtoTools/PasswordCalculator.php +++ b/src/danog/MadelineProto/MTProtoTools/PasswordCalculator.php @@ -61,7 +61,7 @@ class PasswordCalculator /** * SRP b parameter for hashing. * - * @var BigInteger + * @var string */ private $srp_BForHash; /** diff --git a/src/danog/MadelineProto/Tools.php b/src/danog/MadelineProto/Tools.php index 0bf4eecf..b53a0394 100644 --- a/src/danog/MadelineProto/Tools.php +++ b/src/danog/MadelineProto/Tools.php @@ -458,9 +458,14 @@ abstract class Tools extends StrTools /** * Convert generator, promise or any other value to a promise. * + * @template TReturn + * * @param \Generator|Promise|mixed $promise * + * @psalm-param \Generator|Promise|TReturn $promise + * * @return Promise + * @psalm-return Promise */ public static function call($promise): Promise { @@ -512,7 +517,7 @@ abstract class Tools extends StrTools */ public static function callForkDefer($promise): void { - Loop::defer([__CLASS__, 'callFork'], $promise); + Loop::defer([self::class, 'callFork'], $promise); } /** * Rethrow error catched in strand. diff --git a/src/danog/MadelineProto/Wrappers/Events.php b/src/danog/MadelineProto/Wrappers/Events.php index c9f31264..0b89c80d 100644 --- a/src/danog/MadelineProto/Wrappers/Events.php +++ b/src/danog/MadelineProto/Wrappers/Events.php @@ -46,7 +46,7 @@ trait Events /** * Event handler method list. * - * @var array + * @var array */ private $eventHandlerMethods = []; /** diff --git a/src/danog/MadelineProto/Wrappers/Start.php b/src/danog/MadelineProto/Wrappers/Start.php index 3c8372ae..ec51440f 100644 --- a/src/danog/MadelineProto/Wrappers/Start.php +++ b/src/danog/MadelineProto/Wrappers/Start.php @@ -19,6 +19,7 @@ namespace danog\MadelineProto\Wrappers; +use danog\MadelineProto\Ipc\Client; use danog\MadelineProto\Lang; use danog\MadelineProto\MTProto; use danog\MadelineProto\Settings; @@ -40,10 +41,14 @@ trait Start public function start(): \Generator { if ((yield $this->getAuthorization()) === MTProto::LOGGED_IN) { - return $this instanceof \danog\MadelineProto\Ipc\Client ? yield from $this->getSelf() : yield from $this->fullGetSelf(); + return $this instanceof Client ? yield from $this->getSelf() : yield from $this->fullGetSelf(); } if ($this->getWebTemplate() === 'legacy') { - $this->setWebTemplate((yield $this->getSettings())->getTemplates()->getHtmlTemplate()); + if ($this instanceof Client) { + $this->setWebTemplate(yield from $this->getSettings()); + } else { + $this->setWebTemplate($this->settings); + } } if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { if (\strpos(yield Tools::readLine(Lang::$current_lang['loginChoosePrompt']), 'b') !== false) {