added some phpstan-specific generic type annotations

This commit is contained in:
Dylan K. Taylor 2020-01-13 15:05:02 +00:00
parent acaa34785f
commit 0e1cea043a
11 changed files with 61 additions and 16 deletions

View File

@ -1,4 +1,5 @@
includes:
- tests/phpstan/configs/ds-bugs.neon
- tests/phpstan/configs/gc-hacks.neon
- tests/phpstan/configs/gradual-level6.neon
- tests/phpstan/configs/optional-com-dotnet.neon

View File

@ -55,7 +55,10 @@ class Banner extends Transparent{
/** @var DyeColor */
protected $baseColor;
/** @var Deque|BannerPattern[] */
/**
* @var Deque|BannerPattern[]
* @phpstan-var Deque<BannerPattern>
*/
protected $patterns;
public function __construct(BlockIdentifierFlattened $idInfo, string $name, ?BlockBreakInfo $breakInfo = null){
@ -125,6 +128,7 @@ class Banner extends Transparent{
/**
* @return Deque|BannerPattern[]
* @phpstan-return Deque<BannerPattern>
*/
public function getPatterns() : Deque{
return $this->patterns;
@ -132,6 +136,7 @@ class Banner extends Transparent{
/**
* @param Deque|BannerPattern[] $patterns
* @phpstan-param Deque<BannerPattern> $patterns
*/
public function setPatterns(Deque $patterns) : void{
$checked = $patterns->filter(function($v){ return $v instanceof BannerPattern; });

View File

@ -46,7 +46,10 @@ class Banner extends Spawnable{
/** @var DyeColor */
private $baseColor;
/** @var BannerPattern[]|Deque */
/**
* @var BannerPattern[]|Deque
* @phpstan-var Deque<BannerPattern>
*/
private $patterns;
public function __construct(World $world, Vector3 $pos){
@ -113,6 +116,7 @@ class Banner extends Spawnable{
/**
* @return BannerPattern[]|Deque
* @phpstan-return Deque<BannerPattern>
*/
public function getPatterns() : Deque{
return $this->patterns;
@ -120,6 +124,7 @@ class Banner extends Spawnable{
/**
* @param BannerPattern[]|Deque $patterns
* @phpstan-param Deque<BannerPattern> $patterns
*/
public function setPatterns(Deque $patterns) : void{
$this->patterns = $patterns;

View File

@ -58,11 +58,24 @@ class HandlerListManager{
}
}
/**
* @param ReflectionClass $class
* @phpstan-param \ReflectionClass<Event> $class
*
* @return bool
*/
private static function isValidClass(\ReflectionClass $class) : bool{
$tags = Utils::parseDocComment((string) $class->getDocComment());
return !$class->isAbstract() || isset($tags["allowHandle"]);
}
/**
* @param \ReflectionClass $class
* @phpstan-param \ReflectionClass<Event> $class
*
* @return \ReflectionClass|null
* @phpstan-return \ReflectionClass<Event>|null
*/
private static function resolveNearestHandleableParent(\ReflectionClass $class) : ?\ReflectionClass{
for($parent = $class->getParentClass(); $parent !== false && !self::isValidClass($parent); $parent = $parent->getParentClass()){
//NOOP

View File

@ -40,7 +40,10 @@ class Banner extends Item{
/** @var DyeColor */
private $color;
/** @var BannerPattern[]|Deque */
/**
* @var BannerPattern[]|Deque
* @phpstan-var Deque<BannerPattern>
*/
private $patterns;
public function __construct(int $id, int $variant, string $name, DyeColor $color){
@ -67,6 +70,7 @@ class Banner extends Item{
/**
* @return Deque|BannerPattern[]
* @phpstan-return Deque<BannerPattern>
*/
public function getPatterns() : Deque{
return $this->patterns;
@ -74,6 +78,7 @@ class Banner extends Item{
/**
* @param Deque|BannerPattern[] $patterns
* @phpstan-param Deque<BannerPattern> $patterns
*
* @return $this
*/

View File

@ -86,9 +86,15 @@ class Item implements \JsonSerializable{
*/
protected $blockEntityTag = null;
/** @var Set|string[] */
/**
* @var Set|string[]
* @phpstan-var Set<string>
*/
protected $canPlaceOn;
/** @var Set|string[] */
/**
* @var Set|string[]
* @phpstan-var Set<string>
*/
protected $canDestroy;
/**
@ -202,6 +208,7 @@ class Item implements \JsonSerializable{
/**
* @return Set|string[]
* @phpstan-return Set<string>
*/
public function getCanPlaceOn() : Set{
return $this->canPlaceOn;
@ -209,6 +216,7 @@ class Item implements \JsonSerializable{
/**
* @param Set|string[] $canPlaceOn
* @phpstan-param Set<string> $canPlaceOn
*/
public function setCanPlaceOn(Set $canPlaceOn) : void{
$this->canPlaceOn = $canPlaceOn;
@ -216,6 +224,7 @@ class Item implements \JsonSerializable{
/**
* @return Set|string[]
* @phpstan-return Set<string>
*/
public function getCanDestroy() : Set{
return $this->canDestroy;
@ -223,6 +232,7 @@ class Item implements \JsonSerializable{
/**
* @param Set|string[] $canDestroy
* @phpstan-param Set<string> $canDestroy
*/
public function setCanDestroy(Set $canDestroy) : void{
$this->canDestroy = $canDestroy;

View File

@ -34,7 +34,10 @@ abstract class WritableBookBase extends Item{
public const TAG_PAGE_TEXT = "text"; //TAG_String
public const TAG_PAGE_PHOTONAME = "photoname"; //TAG_String - TODO
/** @var WritableBookPage[]|Deque */
/**
* @var WritableBookPage[]|Deque
* @phpstan-var Deque<WritableBookPage>
*/
private $pages;
public function __construct(int $id, int $variant, string $name){

View File

@ -48,6 +48,7 @@ use function unserialize;
abstract class AsyncTask extends \Threaded{
/**
* @var \ArrayObject|mixed[]|null object hash => mixed data
* @phpstan-var \ArrayObject<int, array<string, mixed>>|null
*
* Used to store objects which are only needed on one thread and should not be serialized.
*/

View File

@ -0,0 +1,9 @@
parameters:
ignoreErrors:
-
message: "#^Cannot (access an|assign new) offset (on|to) Ds\\\\Deque\\<.+\\>\\.$#"
path: ../../../src
-
message: "#^Cannot (access|assign) offset (int|-?\\d+) (on|to) Ds\\\\Deque\\<.+\\>\\.$#"
path: ../../../src

View File

@ -33,11 +33,6 @@ parameters:
count: 1
path: ../../../src/block/Liquid.php
-
message: "#^Cannot access an offset on Ds\\\\Deque&iterable\\<pocketmine\\\\block\\\\utils\\\\BannerPattern\\>\\.$#"
count: 1
path: ../../../src/block/tile/Banner.php
-
message: "#^Call to function assert\\(\\) with false and 'unknown hit type' will always evaluate to false\\.$#"
count: 1
@ -54,11 +49,6 @@ parameters:
count: 1
path: ../../../src/item/ItemFactory.php
-
message: "#^Cannot access offset int on Ds\\\\Deque&iterable\\<pocketmine\\\\item\\\\WritableBookPage\\>\\.$#"
count: 2
path: ../../../src/item/WritableBookBase.php
-
#object to array cast analysis bug
message: "#^Call to function is_object\\(\\) with int will always evaluate to false\\.$#"

View File

@ -35,6 +35,9 @@ use PHPStan\Type\VerbosityLevel;
use pocketmine\utils\EnumTrait;
use function sprintf;
/**
* @phpstan-implements Rule<BinaryOp>
*/
class DisallowEnumComparisonRule implements Rule{
public function getNodeType() : string{