Hi,
I just found this issue:
<?php
declare(strict_types=1);
namespace Devsense\Generics\TraitsB;
final class None
{
public function __get(string $name): null
{
return null;
}
}
abstract class MyParent {}
final class MyClassA extends MyParent
{
public int $data = 1;
}
final class MyClassB extends MyParent
{
public string $data = 'a';
}
final class MyClassC extends MyParent
{
public bool $data = true;
}
/**
* @template T
*/
trait MyTrait
{
/**
* @var null|None|T
*/
public null|None|MyParent $test = null;
}
final class test
{
/**
* @use MyTrait<MyClassA|MyClassB>
*/
use MyTrait;
public function runA(MyClassA $v) {}
public function runB(MyClassB $v) {}
public function runC(MyClassC $v) {}
}
$test = new Test();
$t = $test->test;
$test->runA($t);
$test->runB($t);
/**
* Should raise an error
*/
$test->runC($t);
/**
* Unknown variable type
* Should be null|int|string
*/
$d = $t->data;
It seems the @use does not work correctly.
Thank you for the fix.