Skip to content

Commit 4d43ea6

Browse files
authored
Remove Reflection*::setAccessible() calls (#44)
* Enable native lazy objects whenever possible. The LazyGhostTrait will be removed from symfony/var-exporter:8. * Fix usage of deprecated phpstan config option * setAccessible() has no effect as of PHP 8.1
1 parent 083ed0c commit 4d43ea6

File tree

4 files changed

+10
-16
lines changed

4 files changed

+10
-16
lines changed

phpstan.neon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ parameters:
88
- tests/data/doctrine_fixtures/TestFixture1.php
99
- tests/data/doctrine_fixtures/TestFixture2.php
1010
- tests/_support/UnitTester.php
11-
checkMissingIterableValueType: false
1211
reportUnmatchedIgnoredErrors: true
1312
ignoreErrors:
1413
- path: tests/
@@ -21,3 +20,4 @@ parameters:
2120
message: '#Method \S+ has no return type specified#'
2221
- path: tests/
2322
message: '#(?:Method|Property) .+ with generic (?:interface|class) \S+ does not specify its types#'
23+
- identifier: missingType.iterableValue

src/Codeception/Module/Doctrine.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,6 @@ protected function clean(): void
299299
$reflectedEm = new ReflectionClass($em);
300300
if ($reflectedEm->hasProperty('repositories')) {
301301
$property = $reflectedEm->getProperty('repositories');
302-
$property->setAccessible(true);
303302
$property->setValue($em, []);
304303
}
305304
$this->em->clear();
@@ -401,13 +400,11 @@ public function haveFakeRepository(string $className, array $methods = []): void
401400
//Support doctrine versions before 2.4.0
402401

403402
$property = $reflectedEm->getProperty('repositories');
404-
$property->setAccessible(true);
405403
$property->setValue($em, array_merge($property->getValue($em), [$className => $mock]));
406404
} elseif ($reflectedEm->hasProperty('repositoryFactory')) {
407405
//For doctrine 2.4.0+ versions
408406

409407
$repositoryFactoryProperty = $reflectedEm->getProperty('repositoryFactory');
410-
$repositoryFactoryProperty->setAccessible(true);
411408
$repositoryFactory = $repositoryFactoryProperty->getValue($em);
412409

413410
$reflectedRepositoryFactory = new ReflectionClass($repositoryFactory);
@@ -419,7 +416,6 @@ public function haveFakeRepository(string $className, array $methods = []): void
419416
);
420417
} elseif ($reflectedRepositoryFactory->hasProperty('repositoryList')) {
421418
$repositoryListProperty = $reflectedRepositoryFactory->getProperty('repositoryList');
422-
$repositoryListProperty->setAccessible(true);
423419

424420
$repositoryHash = $em->getClassMetadata($className)->getName() . spl_object_id($em);
425421
$repositoryListProperty->setValue(

src/Codeception/Util/ReflectionPropertyAccessor.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ public function getProperty(object $obj, string $field): mixed
2525
$reflectedEntity = new ReflectionClass($class);
2626
if ($reflectedEntity->hasProperty($field)) {
2727
$property = $reflectedEntity->getProperty($field);
28-
$property->setAccessible(true);
2928
return $property->getValue($obj);
3029
}
3130
$class = get_parent_class($class);
@@ -62,7 +61,6 @@ private function setPropertiesForClass(?object $obj, string $class, array $data)
6261

6362
foreach ($reflectedEntity->getProperties() as $property) {
6463
if (isset($data[$property->name])) {
65-
$property->setAccessible(true);
6664
$property->setValue($obj, $data[$property->name]);
6765
}
6866
}

tests/unit/Codeception/Module/Doctrine2Test.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,18 +81,18 @@ protected function _setUp()
8181
$connection = DriverManager::getConnection(['driver' => $sqliteDriver, 'memory' => true]);
8282

8383
if (version_compare(InstalledVersions::getVersion('doctrine/orm'), '3', '>=')) {
84-
$this->em = new EntityManager(
85-
$connection,
86-
ORMSetup::createAttributeMetadataConfiguration([$dir], true)
87-
);
84+
$configuration = ORMSetup::createAttributeMetadataConfiguration([$dir], true);
8885
} else {
89-
$this->em = new EntityManager(
90-
$connection,
91-
// @phpstan-ignore-next-line
92-
ORMSetup::createAnnotationMetadataConfiguration([$dir], true)
93-
);
86+
// @phpstan-ignore-next-line
87+
$configuration = ORMSetup::createAnnotationMetadataConfiguration([$dir], true);
9488
}
9589

90+
if (PHP_VERSION_ID >= 80400 && method_exists($configuration, 'enableNativeLazyObjects')) {
91+
$configuration->enableNativeLazyObjects(true);
92+
}
93+
94+
$this->em = new EntityManager($connection, $configuration);
95+
9696
(new SchemaTool($this->em))->createSchema([
9797
$this->em->getClassMetadata(CompositePrimaryKeyEntity::class),
9898
$this->em->getClassMetadata(PlainEntity::class),

0 commit comments

Comments
 (0)