¿Cómo lidiar con la advertencia de "método no encontrado en clase" para los métodos implementados mágicamente?

Estoy sentado en una base de código grande que contiene varias clases que exponen la funcionalidad a través de métodos implementados mágicamente (usando__call y__callStatic). Por ejemplo:

class Foo {
    public function __call($name, $parameters) {
        echo "You called $name().\n";
    }
}

$f = new Foo;
$f->test();   // runs fine, but PhpStorm flags as a warning

El problema es que PhpStorm piensa que latest() El método no existe, por lo que da una advertencia en el sitio de la llamada. Esto es un poco molesto, ya que, por supuesto, el código se ejecutará y se comportará como se espera.

Ya sintonicé la severidad al marcar la opción de "degradar la severidad si los métodos __magic están presentes en la clase", pero preferiría:

Deshabilita completamente esta funcionalidad para clases específicas.solamenteotrabaje con el IDE en lugar de hacerlo en contra, proporcione la información que ya tengo para que nuestros puntos de vista estén de acuerdo

¿Es posible alguno de los anteriores? ¿Si es así, cómo?

Pregunta de bonificación adicional: considere el caso en el que las llamadas de método se encadenan.

$f = new Foo;
$f->test()->chain()->moreChain();   // potentially runs fine

Suponiendo que la magia llame a$f->test() devuelve algo apropiado: las llamadas subsiguientes (posiblemente, pero no necesariamente, también mágicas) funcionarán bien. Sin embargo, ya que no hay forma de que sepa decirle al IDE quétest() devuelve que marca el resto de la cadena de llamadas como lleno de métodos faltantes también. Y para empeorar las cosas, la configuración de "severidad de bajada de calificación" no se aplica a estas advertencias ya que el IDE no sabe qué clase se supone que deben ser estos objetos intermedios.

¿Hay alguna solución que también pueda cubrir este caso?

Actualizar

A pesar de documentar los métodos mágicos con@method Las anotaciones parecen funcionar, tengo que asumir que actualmente hay varios problemas con este enfoque porque solo me tomó un poco de trabajo encontrar estos errores relacionados:

La sugerencia de tipo para los argumentos del método no funciona correctamente con primitivosLas anotaciones funcionan para una llamada, pero no para llamadas encadenadas

Espero que los solucionen en un plazo de tiempo razonable.

Respuestas a la pregunta(4)

Su respuesta a la pregunta