Skip to content

Commit d4be5ce

Browse files
authored
Merge pull request #2234 from Haehnchen/feature/2077-string-attribute-targetEntity
#2077 support resolving "targetEntity" as string for Doctrine attribute metadata
2 parents ec3f2aa + 3914bdf commit d4be5ce

File tree

4 files changed

+18
-8
lines changed

4 files changed

+18
-8
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/doctrine/metadata/driver/DoctrinePhpAttributeMappingDriver.java

+5-8
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import com.jetbrains.php.lang.psi.elements.Field;
66
import com.jetbrains.php.lang.psi.elements.PhpAttribute;
77
import com.jetbrains.php.lang.psi.elements.PhpClass;
8-
import com.jetbrains.php.lang.psi.stubs.indexes.expectedArguments.PhpExpectedFunctionArgument;
9-
import com.jetbrains.php.lang.psi.stubs.indexes.expectedArguments.PhpExpectedFunctionClassConstantArgument;
108
import fr.adrienbrault.idea.symfony2plugin.doctrine.dict.DoctrineModelField;
119
import fr.adrienbrault.idea.symfony2plugin.doctrine.metadata.dict.DoctrineMetadataModel;
1210
import fr.adrienbrault.idea.symfony2plugin.util.PhpElementsUtil;
@@ -90,12 +88,11 @@ public DoctrineMetadataModel getMetadata(@NotNull DoctrineMappingDriverArguments
9088
String substring = fqn.substring(fqn.lastIndexOf("\\") + 1);
9189
doctrineModelField.setRelationType(substring);
9290

93-
PhpExpectedFunctionArgument argument = PhpElementsUtil.findAttributeArgumentByName("targetEntity", attribute);
94-
if (argument instanceof PhpExpectedFunctionClassConstantArgument) {
95-
String repositoryClassRaw = ((PhpExpectedFunctionClassConstantArgument) argument).getClassFqn();
96-
if (StringUtils.isNotBlank(repositoryClassRaw)) {
97-
doctrineModelField.setRelation(repositoryClassRaw);
98-
}
91+
// not resolving same entity namespace prefix: EntityHelper.resolveDoctrineLikePropertyClass
92+
// possible not a wide range usages for attributes
93+
String targetEntity = PhpElementsUtil.getAttributeArgumentStringByName(attribute, "targetEntity");
94+
if (StringUtils.isNotBlank(targetEntity)) {
95+
doctrineModelField.setRelation("\\" + StringUtils.stripStart(targetEntity, "\\"));
9996
}
10097
}
10198
}

src/main/java/fr/adrienbrault/idea/symfony2plugin/util/PhpElementsUtil.java

+1
Original file line numberDiff line numberDiff line change
@@ -2035,6 +2035,7 @@ public static PhpExpectedFunctionArgument findAttributeArgumentByName(@NotNull S
20352035
return null;
20362036
}
20372037

2038+
@Nullable
20382039
public static String getAttributeArgumentStringByName(@NotNull PhpAttribute phpAttribute, @NotNull String attributeName) {
20392040
for (PhpAttribute.PhpAttributeArgument argument : phpAttribute.getArguments()) {
20402041
if (!attributeName.equals(argument.getName())) {

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/doctrine/metadata/driver/DoctrinePhpAttributeMappingDriverTest.java

+6
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ public void testPhpAttributesMetadata() {
4747

4848
assertEquals("\\Doctrine\\Orm\\MyTrait\\Egg", metadata.getField("appleTrait").getRelation());
4949
assertEquals("ManyToOne", metadata.getField("appleTrait").getRelationType());
50+
51+
assertEquals("\\ORM\\Foobar\\Egg", metadata.getField("eggClassString").getRelation());
52+
assertEquals("ManyToMany", metadata.getField("eggClassString").getRelationType());
53+
54+
assertEquals("\\ORM\\Foobar\\Egg", metadata.getField("eggClassString").getRelation());
55+
assertEquals("ManyToMany", metadata.getField("eggClassString").getRelationType());
5056
}
5157

5258
private DoctrineMetadataModel createOrmMetadata() {

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/doctrine/metadata/driver/fixtures/attributes.php

+6
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,11 @@ class AttributeEntity {
5151

5252
#[ORM\ManyToMany(targetEntity:Egg::class)]
5353
public $egg;
54+
55+
#[ORM\ManyToMany(targetEntity: '\ORM\Foobar\Egg')]
56+
public $eggClassString;
57+
58+
#[ORM\ManyToMany(targetEntity: 'ORM\Foobar\Egg')]
59+
public $eggClassStringBackslashless;
5460
};
5561
}

0 commit comments

Comments
 (0)