Skip to content

Commit

Permalink
Merge pull request #223 from gsteel/improve-plugin-manager-type-infer…
Browse files Browse the repository at this point in the history
…ence

Improve plugin manager type inference
  • Loading branch information
Ocramius committed Sep 19, 2022
2 parents 5acfb8a + 5fdcb8b commit 4929dea
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 24 deletions.
21 changes: 4 additions & 17 deletions psalm-baseline.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<files psalm-version="4.24.0@06dd975cb55d36af80f242561738f16c5f58264f">
<files psalm-version="4.27.0@faf106e717c37b8c81721845dba9de3d8deed8ff">
<file src="src/Command/DeprecatedStorageFactoryConfigurationCheckCommand.php">
<MixedArgument occurrences="2">
<code>$cacheConfiguration</code>
Expand Down Expand Up @@ -199,13 +199,11 @@
<code>null === $ttl</code>
</DocblockTypeContradiction>
<MixedArgument occurrences="3">
<code>$key</code>
<code>$key</code>
<code>$key</code>
<code>$ttl</code>
</MixedArgument>
<MixedAssignment occurrences="6">
<code>$key</code>
<code>$key</code>
<code>$key</code>
<code>$result</code>
Expand Down Expand Up @@ -422,9 +420,6 @@
<MissingClosureParamType occurrences="1">
<code>$letters</code>
</MissingClosureParamType>
<MissingClosureReturnType occurrences="1">
<code>function ($letters) {</code>
</MissingClosureReturnType>
<MixedArgument occurrences="3">
<code>$key</code>
<code>$letter</code>
Expand Down Expand Up @@ -669,6 +664,9 @@
</PossiblyNullOperand>
</file>
<file src="src/Storage/PluginManager.php">
<MixedReturnStatement occurrences="1">
<code>$plugin</code>
</MixedReturnStatement>
<NonInvariantDocblockPropertyType occurrences="3">
<code>$aliases</code>
<code>$factories</code>
Expand Down Expand Up @@ -804,9 +802,6 @@
<code>$keys</code>
<code>$keys</code>
</InvalidArgument>
<InvalidScalarArgument occurrences="1">
<code>time() - 1</code>
</InvalidScalarArgument>
<MissingReturnType occurrences="3">
<code>testDeleteItemInvalidKeyThrowsException</code>
<code>testGetItemInvalidKeyThrowsException</code>
Expand Down Expand Up @@ -839,9 +834,6 @@
<code>isHit</code>
<code>set</code>
</MixedMethodCall>
<PossiblyFalseArgument occurrences="1">
<code>DateTimeImmutable::createFromFormat('U', time() - 1)</code>
</PossiblyFalseArgument>
<PossiblyInvalidArgument occurrences="1">
<code>$items</code>
</PossiblyInvalidArgument>
Expand Down Expand Up @@ -907,10 +899,6 @@
</InvalidScalarArgument>
<MissingClosureParamType occurrences="1">
<code>$event</code>
<code>$event</code>
<code>$event</code>
<code>$event</code>
<code>$event</code>
</MissingClosureParamType>
<MissingClosureReturnType occurrences="1">
<code>static function ($event) use ($retVal) {</code>
Expand All @@ -928,7 +916,6 @@
<code>$result</code>
<code>$rs</code>
<code>$v</code>
<code>$v</code>
</MixedAssignment>
<MixedInferredReturnType occurrences="1">
<code>array</code>
Expand Down
5 changes: 4 additions & 1 deletion src/Storage/AdapterPluginManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
* Enforces that adapters retrieved are instances of
* StorageInterface. Additionally, it registers a number of default
* adapters available.
*
* @extends AbstractPluginManager<StorageInterface>
* @final
*/
final class AdapterPluginManager extends AbstractPluginManager
{
Expand All @@ -20,6 +23,6 @@ final class AdapterPluginManager extends AbstractPluginManager
*/
protected $sharedByDefault = false;

/** @var string */
/** @var class-string */
protected $instanceOf = StorageInterface::class;
}
11 changes: 5 additions & 6 deletions src/Storage/PluginManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
* Enforces that plugins retrieved are instances of
* Plugin\PluginInterface. Additionally, it registers a number of default
* plugins available.
*
* @extends AbstractPluginManager<PluginInterface>
* @final
*/
final class PluginManager extends AbstractPluginManager
{
Expand Down Expand Up @@ -54,14 +57,10 @@ final class PluginManager extends AbstractPluginManager
*/
protected $sharedByDefault = false;

/** @var string */
/** @var class-string */
protected $instanceOf = PluginInterface::class;

/**
* @param string $name
* @param null|array $options
* @return mixed
*/
/** @inheritDoc */
public function build($name, ?array $options = null)
{
$options ??= [];
Expand Down
29 changes: 29 additions & 0 deletions test/StaticAnalysis/AdapterPluginManagerTypes.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

declare(strict_types=1);

namespace LaminasTest\Cache\StaticAnalysis;

use Laminas\Cache\Storage\Adapter\Memory;
use Laminas\Cache\Storage\AdapterPluginManager;
use Laminas\Cache\Storage\StorageInterface;

final class AdapterPluginManagerTypes
{
public function willReturnAnAdapterUsingFQCN(AdapterPluginManager $manager): StorageInterface
{
return $manager->get(Memory::class);
}

public function validateWillAssertInstanceType(AdapterPluginManager $manager, object $instance): StorageInterface
{
$manager->validate($instance);

return $instance;
}

public function buildWillReturnAdapterUsingFQCN(AdapterPluginManager $manager): StorageInterface
{
return $manager->build(Memory::class);
}
}
29 changes: 29 additions & 0 deletions test/StaticAnalysis/PluginManagerTypes.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

declare(strict_types=1);

namespace LaminasTest\Cache\StaticAnalysis;

use Laminas\Cache\Storage\Plugin\PluginInterface;
use Laminas\Cache\Storage\Plugin\Serializer;
use Laminas\Cache\Storage\PluginManager;

final class PluginManagerTypes
{
public function willReturnAPluginUsingFQCN(PluginManager $manager): PluginInterface
{
return $manager->get(Serializer::class);
}

public function validateWillAssertInstanceType(PluginManager $manager, object $instance): PluginInterface
{
$manager->validate($instance);

return $instance;
}

public function buildWillReturnPluginUsingFQCN(PluginManager $manager): PluginInterface
{
return $manager->build(Serializer::class);
}
}

0 comments on commit 4929dea

Please sign in to comment.