Skip to content

Commit 973a4e8

Browse files
authored
Overridden EntityReferenceFieldItemListInterface::referencedEntities generics error (#879)
* Overridden EntityReferenceFieldItemListInterface::referencedEntities generics error * Define referencedEntities on EntityReferenceFieldItemList stub
1 parent 17bb121 commit 973a4e8

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

stubs/Drupal/Core/Field/EntityReferenceFieldItemList.stub

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,9 @@ use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem;
1212
*/
1313
class EntityReferenceFieldItemList extends FieldItemList implements EntityReferenceFieldItemListInterface {
1414

15-
}
15+
/**
16+
* @return array<int, T>
17+
*/
18+
public function referencedEntities();
19+
20+
}

tests/src/Generics/EntityReferenceFieldItemListGenericTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ final class EntityReferenceFieldItemListGenericTest extends TypeInferenceTestCas
1414
public static function dataFileAsserts(): iterable
1515
{
1616
yield from self::gatherAssertTypes(__DIR__ . '/data/entity-reference-field-item-list.php');
17+
yield from self::gatherAssertTypes(__DIR__ . '/data/bug-878.php');
1718
}
1819

1920
/**
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
namespace Bug878;
4+
5+
use Drupal\Core\Field\EntityReferenceFieldItemList;
6+
use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
7+
use Drupal\node\Entity\Node;
8+
use function PHPStan\Testing\assertType;
9+
10+
class EntityReferenceRevisionsFieldItemList extends EntityReferenceFieldItemList implements EntityReferenceFieldItemListInterface {
11+
12+
/**
13+
* {@inheritdoc}
14+
*/
15+
public function referencedEntities() {
16+
$target_entities = [];
17+
foreach ($this->list as $delta => $item) {
18+
if ($item->entity) {
19+
$target_entities[$delta] = $item->entity;
20+
}
21+
}
22+
return $target_entities;
23+
}
24+
25+
26+
}
27+
28+
$paragraphFields = [];
29+
30+
$node = Node::load(1);
31+
assert($node instanceof Node);
32+
33+
foreach ($node as $field) {
34+
if ($field instanceof EntityReferenceRevisionsFieldItemList) {
35+
$paragraphFields[] = $field;
36+
}
37+
}
38+
39+
foreach ($paragraphFields as $field) {
40+
foreach ($field->referencedEntities() as $entity) {
41+
assertType('Drupal\Core\Entity\EntityInterface', $entity);
42+
assertType('int|string|null', $entity->id());
43+
}
44+
}

0 commit comments

Comments
 (0)