diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index f5f73b8a..622e1283 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -20,6 +20,16 @@ parameters: count: 1 path: src/Rules/Doctrine/ORM/EntityRelationRule.php + - + message: "#^Class Doctrine\\\\ORM\\\\Mapping\\\\FieldMapping not found\\.$#" + count: 1 + path: src/Rules/Doctrine/ORM/PropertiesExtension.php + + - + message: "#^Instanceof between array\\\\|bool\\|int\\|string\\> and Doctrine\\\\ORM\\\\Mapping\\\\FieldMapping will always evaluate to false\\.$#" + count: 1 + path: src/Rules/Doctrine/ORM/PropertiesExtension.php + - message: "#^PHPDoc tag @var with type class\\-string is not subtype of native type 'Doctrine\\\\\\\\Bundle…'\\.$#" count: 1 diff --git a/src/Rules/Doctrine/ORM/PropertiesExtension.php b/src/Rules/Doctrine/ORM/PropertiesExtension.php index d9accb80..177b4ebd 100644 --- a/src/Rules/Doctrine/ORM/PropertiesExtension.php +++ b/src/Rules/Doctrine/ORM/PropertiesExtension.php @@ -3,11 +3,11 @@ namespace PHPStan\Rules\Doctrine\ORM; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMapping; use PHPStan\Reflection\PropertyReflection; use PHPStan\Rules\Properties\ReadWritePropertiesExtension; use PHPStan\Type\Doctrine\ObjectMetadataResolver; use Throwable; -use function array_key_exists; use function in_array; class PropertiesExtension implements ReadWritePropertiesExtension @@ -47,7 +47,16 @@ public function isAlwaysWritten(PropertyReflection $property, string $propertyNa if (isset($metadata->fieldMappings[$propertyName])) { $mapping = $metadata->fieldMappings[$propertyName]; - if (array_key_exists('generated', $mapping) && $mapping['generated'] !== ClassMetadata::GENERATED_NEVER) { + + if ($mapping instanceof FieldMapping) { + // ORM 3 + $generated = $mapping->generated; + } else { + // ORM 2 + $generated = $mapping['generated'] ?? null; + } + + if ($generated !== null && $generated !== ClassMetadata::GENERATED_NEVER) { return true; } }