diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/xml/XmlHelper.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/xml/XmlHelper.java index 1553642ff..ed4edb33b 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/xml/XmlHelper.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/xml/XmlHelper.java @@ -427,7 +427,12 @@ public static PsiElement getLocalServiceName(PsiFile psiFile, String serviceName for(XmlTag servicesTag: xmlTag.getSubTags()) { if(servicesTag.getName().equals("services")) { for(XmlTag serviceTag: servicesTag.getSubTags()) { - String serviceNameId = serviceTag.getAttributeValue("id"); + String name = serviceTag.getName(); + // we know the attributes and context, but rebuild it like yaml + String serviceNameId = "prototype".equals(name) + ? serviceTag.getAttributeValue("namespace") + : serviceTag.getAttributeValue("id"); + if(serviceNameId != null && serviceNameId.equalsIgnoreCase(serviceName)) { return serviceTag; } diff --git a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/stubs/ServiceIndexUtilTest.java b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/stubs/ServiceIndexUtilTest.java index bf98d954e..35bdb0266 100644 --- a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/stubs/ServiceIndexUtilTest.java +++ b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/stubs/ServiceIndexUtilTest.java @@ -53,6 +53,16 @@ public void testFindServiceDefinitionsForStringInsideXml() { )); } + public void testFindServiceDefinitionsForNamespacePrototype() { + assertTrue(ServiceIndexUtil.findServiceDefinitions(getProject(), "App\\").stream() + .anyMatch(psiElement -> psiElement instanceof XmlTag && "App\\".equalsIgnoreCase(((XmlTag) psiElement).getAttributeValue("namespace"))) + ); + + assertTrue(ServiceIndexUtil.findServiceDefinitions(getProject(), "app\\").stream() + .anyMatch(psiElement -> psiElement instanceof XmlTag && "App\\".equalsIgnoreCase(((XmlTag) psiElement).getAttributeValue("namespace"))) + ); + } + public void testFindServiceDefinitionsForStringInsideXmlUpperCase() { assertNotNull(ContainerUtil.find( ServiceIndexUtil.findServiceDefinitions(getProject(), "foo.xml_id.upper"), diff --git a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/stubs/fixtures/services.xml b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/stubs/fixtures/services.xml index 33d44186e..e895f85b3 100644 --- a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/stubs/fixtures/services.xml +++ b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/stubs/fixtures/services.xml @@ -7,6 +7,8 @@ + +