This commit is contained in:
Ivan Fedorov 2021-07-29 22:21:09 +02:00 committed by Ivan Fedorov
parent 66908ece8f
commit bf52342678
10 changed files with 37 additions and 43 deletions

View File

@ -1,8 +1,8 @@
name: PhpStorm Stubs PECL Test
on:
workflow_dispatch:
push:
workflow_dispatch:
schedule:
- cron: '* * 1 * *'
@ -38,4 +38,4 @@ jobs:
run: docker-compose -f docker-compose.yml run -e PECL=true test_runner /opt/project/phpstorm-stubs/vendor/bin/phpunit /opt/project/phpstorm-stubs/tests/
env:
PHP_VERSION: '8.0'
PECL: true
PECL: true

View File

@ -11,4 +11,4 @@ services:
pecl_extensions:
build: tests/DockerImages/peclExtensions
volumes:
- .:/opt/project/phpstorm-stubs
- .:/opt/project/phpstorm-stubs

View File

@ -22,6 +22,7 @@ use Reflector;
use RuntimeException;
use stdClass;
use StubTests\Parsers\ParserUtils;
use StubTests\TestData\Providers\ReflectionStubsSingleton;
abstract class BasePHPElement
{
@ -212,4 +213,15 @@ abstract class BasePHPElement
{
return in_array(doubleval(getenv('PHP_VERSION')), ParserUtils::getAvailableInVersions($element));
}
/**
* @param PHPInterface|PHPClass $class
* @return bool
* @throws RuntimeException
*/
public static function classExistInCoreReflection($class): bool
{
return !empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getClass($class->name)) ||
!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getInterface($class->name));
}
}

View File

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace StubTests\TestData\Providers\Reflection;
use Generator;
use StubTests\Model\BasePHPElement;
use StubTests\Model\PHPClass;
use StubTests\Model\StubProblemType;
use StubTests\TestData\Providers\EntitiesFilter;
@ -16,10 +17,7 @@ class ReflectionClassesTestDataProviders
$allClassesAndInterfaces = ReflectionStubsSingleton::getReflectionStubs()->getClasses() +
ReflectionStubsSingleton::getReflectionStubs()->getInterfaces();
foreach (EntitiesFilter::getFiltered($allClassesAndInterfaces) as $class) {
if (!empty(getenv('PECL')) &&
(!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getClass($class->name)) ||
!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getInterface($class->name)))
) {
if (!empty(getenv('PECL')) && BasePHPElement::classExistInCoreReflection($class)) {
continue;
}
//exclude classes from PHPReflectionParser
@ -36,10 +34,7 @@ class ReflectionClassesTestDataProviders
fn (PHPClass $class) => empty($class->interfaces),
StubProblemType::WRONG_INTERFACE
) as $class) {
if (!empty(getenv('PECL')) &&
(!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getClass($class->name)) ||
!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getInterface($class->name)))
) {
if (!empty(getenv('PECL')) && BasePHPElement::classExistInCoreReflection($class)) {
continue;
}
//exclude classes from PHPReflectionParser
@ -59,10 +54,7 @@ class ReflectionClassesTestDataProviders
StubProblemType::WRONG_PARENT
);
foreach ($filtered as $class) {
if (!empty(getenv('PECL')) &&
(!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getClass($class->name)) ||
!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getInterface($class->name)))
) {
if (!empty(getenv('PECL')) && BasePHPElement::classExistInCoreReflection($class)) {
continue;
}
yield "class $class->name" => [$class];

View File

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace StubTests\TestData\Providers\Reflection;
use Generator;
use StubTests\Model\BasePHPElement;
use StubTests\Model\PHPClass;
use StubTests\Model\PHPConst;
use StubTests\Model\PHPInterface;
@ -38,10 +39,7 @@ class ReflectionConstantsProvider
$classesAndInterfaces = ReflectionStubsSingleton::getReflectionStubs()->getClasses() +
ReflectionStubsSingleton::getReflectionStubs()->getInterfaces();
foreach (EntitiesFilter::getFiltered($classesAndInterfaces) as $class) {
if (!empty(getenv('PECL')) &&
(!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getClass($class->name)) ||
!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getInterface($class->name)))
) {
if (!empty(getenv('PECL')) && BasePHPElement::classExistInCoreReflection($class)) {
continue;
}
foreach (EntitiesFilter::getFiltered($class->constants) as $constant) {
@ -55,7 +53,7 @@ class ReflectionConstantsProvider
$classesAndInterfaces = ReflectionStubsSingleton::getReflectionStubs()->getClasses() +
ReflectionStubsSingleton::getReflectionStubs()->getInterfaces();
foreach (EntitiesFilter::getFiltered($classesAndInterfaces) as $class) {
if (!empty(getenv('PECL')) && !empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getClass($class->name))) {
if (!empty(getenv('PECL')) && BasePHPElement::classExistInCoreReflection($class)) {
continue;
}
foreach (self::getFilteredConstants($class) as $constant) {

View File

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace StubTests\TestData\Providers\Reflection;
use Generator;
use StubTests\Model\BasePHPElement;
use StubTests\Model\StubProblemType;
use StubTests\TestData\Providers\EntitiesFilter;
use StubTests\TestData\Providers\ReflectionStubsSingleton;
@ -48,9 +49,7 @@ class ReflectionMethodsProvider
$classesAndInterfaces = ReflectionStubsSingleton::getReflectionStubs()->getClasses() +
ReflectionStubsSingleton::getReflectionStubs()->getInterfaces();
foreach (EntitiesFilter::getFiltered($classesAndInterfaces) as $class) {
if (!empty(getenv('PECL')) &&
(!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getClass($class->name))) ||
!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getInterface($class->name))) {
if (!empty(getenv('PECL')) && BasePHPElement::classExistInCoreReflection($class)) {
continue;
}
foreach (EntitiesFilter::getFiltered($class->methods, null, ...$problemTypes) as $method) {

View File

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace StubTests\TestData\Providers\Reflection;
use Generator;
use StubTests\Model\BasePHPElement;
use StubTests\Model\PHPParameter;
use StubTests\Model\StubProblemType;
use StubTests\TestData\Providers\EntitiesFilter;
@ -81,9 +82,7 @@ class ReflectionParametersProvider
$classesAndInterfaces = ReflectionStubsSingleton::getReflectionStubs()->getClasses() +
ReflectionStubsSingleton::getReflectionStubs()->getInterfaces();
foreach (EntitiesFilter::getFiltered($classesAndInterfaces) as $class) {
if (!empty(getenv('PECL')) &&
(!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getClass($class->name)) ||
!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getInterface($class->name)))) {
if (!empty(getenv('PECL')) && BasePHPElement::classExistInCoreReflection($class)) {
continue;
}
//exclude classes from PHPReflectionParser
@ -102,9 +101,7 @@ class ReflectionParametersProvider
$classesAndInterfaces = ReflectionStubsSingleton::getReflectionStubs()->getClasses() +
ReflectionStubsSingleton::getReflectionStubs()->getInterfaces();
foreach (EntitiesFilter::getFiltered($classesAndInterfaces) as $class) {
if (!empty(getenv('PECL')) &&
(!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getClass($class->name)) ||
!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getInterface($class->name)))) {
if (!empty(getenv('PECL')) && BasePHPElement::classExistInCoreReflection($class)) {
continue;
}
//exclude classes from PHPReflectionParser
@ -127,8 +124,7 @@ class ReflectionParametersProvider
$classesAndInterfaces = ReflectionStubsSingleton::getReflectionStubs()->getClasses() +
ReflectionStubsSingleton::getReflectionStubs()->getInterfaces();
foreach (EntitiesFilter::getFiltered($classesAndInterfaces) as $class) {
if (!empty(getenv('PECL')) && (!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getClass($class->name))) ||
!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getInterface($class->name))) {
if (!empty(getenv('PECL')) && BasePHPElement::classExistInCoreReflection($class)) {
continue;
}
//exclude classes from PHPReflectionParser

View File

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace StubTests\TestData\Providers\Reflection;
use Generator;
use StubTests\Model\BasePHPElement;
use StubTests\Model\PHPProperty;
use StubTests\Model\StubProblemType;
use StubTests\TestData\Providers\EntitiesFilter;
@ -35,8 +36,7 @@ class ReflectionPropertiesProvider
{
$classesAndInterfaces = ReflectionStubsSingleton::getReflectionStubs()->getClasses();
foreach (EntitiesFilter::getFiltered($classesAndInterfaces) as $class) {
if (!empty(getenv('PECL')) && (!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getClass($class->name)) ||
!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getInterface($class->name)))) {
if (!empty(getenv('PECL')) && BasePHPElement::classExistInCoreReflection($class)) {
continue;
}
foreach (EntitiesFilter::getFiltered(

View File

@ -16,7 +16,7 @@ class ReflectionStubsSingleton
/**
* @var StubsContainer|null
*/
private static $peclReflectionStubs = null;
private static $reflectionStubsNoPecl = null;
public static function getReflectionStubs(): StubsContainer
{
@ -28,11 +28,11 @@ class ReflectionStubsSingleton
public static function getReflectionStubsNoPecl(): StubsContainer
{
if (self::$peclReflectionStubs === null) {
if (file_exists(__DIR__ . '/../../ReflectionDataNoPecl.json')) {
self::$reflectionStubs = unserialize(file_get_contents(__DIR__ . '/../../../ReflectionDataNoPecl.json'));
if (self::$reflectionStubsNoPecl === null) {
if (file_exists(__DIR__ . '/../../../ReflectionDataNoPecl.json')) {
self::$reflectionStubsNoPecl = unserialize(file_get_contents(__DIR__ . '/../../../ReflectionDataNoPecl.json'));
}
}
return self::$reflectionStubs;
return self::$reflectionStubsNoPecl;
}
}

View File

@ -5,11 +5,11 @@ namespace StubTests\TestData\Providers\Stubs;
use Generator;
use RuntimeException;
use StubTests\Model\BasePHPElement;
use StubTests\Model\StubProblemType;
use StubTests\Parsers\ParserUtils;
use StubTests\TestData\Providers\EntitiesFilter;
use StubTests\TestData\Providers\PhpStormStubsSingleton;
use StubTests\TestData\Providers\ReflectionStubsSingleton;
class StubsParametersProvider
{
@ -75,10 +75,7 @@ class StubsParametersProvider
$coreClassesAndInterfaces = PhpStormStubsSingleton::getPhpStormStubs()->getCoreClasses() +
PhpStormStubsSingleton::getPhpStormStubs()->getCoreInterfaces();
foreach (EntitiesFilter::getFiltered($coreClassesAndInterfaces) as $class) {
if (!empty(getenv('PECL')) &&
(!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getClass($class->name)) ||
!empty(ReflectionStubsSingleton::getReflectionStubsNoPecl()->getInterface($class->name)))
) {
if (!empty(getenv('PECL')) && BasePHPElement::classExistInCoreReflection($class)) {
continue;
}
foreach (EntitiesFilter::getFilteredFunctions($class, false) as $method) {