Deal with a whole lot of PHPStan suppressed key casting errors

closes #6534
This commit is contained in:
Dylan K. Taylor
2024-11-25 14:30:58 +00:00
parent aef4fa7174
commit 5325ecee37
66 changed files with 338 additions and 124 deletions

View File

@ -70,7 +70,6 @@ final class ApiVersion{
* @return string[]
*/
public static function checkAmbiguousVersions(array $versions) : array{
/** @var VersionString[][] $indexedVersions */
$indexedVersions = [];
foreach($versions as $str){
@ -85,9 +84,8 @@ final class ApiVersion{
}
}
/** @var VersionString[] $result */
$result = [];
foreach($indexedVersions as $major => $list){
foreach($indexedVersions as $list){
if(count($list) > 1){
array_push($result, ...$list);
}

View File

@ -26,6 +26,7 @@ namespace pocketmine\plugin;
use pocketmine\permission\Permission;
use pocketmine\permission\PermissionParser;
use pocketmine\permission\PermissionParserException;
use pocketmine\utils\Utils;
use function array_map;
use function array_values;
use function get_debug_type;
@ -151,7 +152,7 @@ class PluginDescription{
$this->compatibleOperatingSystems = array_map("\strval", (array) ($plugin[self::KEY_OS] ?? []));
if(isset($plugin[self::KEY_COMMANDS]) && is_array($plugin[self::KEY_COMMANDS])){
foreach($plugin[self::KEY_COMMANDS] as $commandName => $commandData){
foreach(Utils::promoteKeys($plugin[self::KEY_COMMANDS]) as $commandName => $commandData){
if(!is_string($commandName)){
throw new PluginDescriptionParseException("Invalid Plugin commands, key must be the name of the command");
}
@ -177,7 +178,7 @@ class PluginDescription{
if(isset($plugin[self::KEY_EXTENSIONS])){
$extensions = (array) $plugin[self::KEY_EXTENSIONS];
$isLinear = $extensions === array_values($extensions);
foreach($extensions as $k => $v){
foreach(Utils::promoteKeys($extensions) as $k => $v){
if($isLinear){
$k = $v;
$v = "*";

View File

@ -23,6 +23,7 @@ declare(strict_types=1);
namespace pocketmine\plugin;
use pocketmine\utils\Utils;
use function array_flip;
use function is_array;
use function is_float;
@ -77,7 +78,7 @@ class PluginGraylist{
if(!is_array($array["plugins"])){
throw new \InvalidArgumentException("\"plugins\" must be an array");
}
foreach($array["plugins"] as $k => $v){
foreach(Utils::promoteKeys($array["plugins"]) as $k => $v){
if(!is_string($v) && !is_int($v) && !is_float($v)){
throw new \InvalidArgumentException("\"plugins\" contains invalid element at position $k");
}

View File

@ -69,10 +69,16 @@ use function strtolower;
* Manages all the plugins
*/
class PluginManager{
/** @var Plugin[] */
/**
* @var Plugin[]
* @phpstan-var array<string, Plugin>
*/
protected array $plugins = [];
/** @var Plugin[] */
/**
* @var Plugin[]
* @phpstan-var array<string, Plugin>
*/
protected array $enabledPlugins = [];
/** @var array<string, array<string, true>> */
@ -114,6 +120,7 @@ class PluginManager{
/**
* @return Plugin[]
* @phpstan-return array<string, Plugin>
*/
public function getPlugins() : array{
return $this->plugins;
@ -526,7 +533,7 @@ class PluginManager{
}
public function tickSchedulers(int $currentTick) : void{
foreach($this->enabledPlugins as $pluginName => $p){
foreach(Utils::promoteKeys($this->enabledPlugins) as $pluginName => $p){
if(isset($this->enabledPlugins[$pluginName])){
//the plugin may have been disabled as a result of updating other plugins' schedulers, and therefore
//removed from enabledPlugins; however, foreach will still see it due to copy-on-write