Skip to content

Commit 6fc58c3

Browse files
authored
Merge pull request #1804 from Haehnchen/feature/xml-references-file-extension
xml file references should only trigger with "xml" extension
2 parents 3fb23cb + 0942ce7 commit 6fc58c3

File tree

3 files changed

+57
-28
lines changed

3 files changed

+57
-28
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/config/xml/XmlHelper.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.intellij.psi.util.PsiTreeUtil;
1010
import com.intellij.psi.xml.*;
1111
import com.intellij.util.Consumer;
12+
import com.intellij.util.ProcessingContext;
1213
import com.jetbrains.php.lang.psi.elements.Function;
1314
import com.jetbrains.php.lang.psi.elements.Method;
1415
import com.jetbrains.php.lang.psi.elements.Parameter;
@@ -29,6 +30,14 @@
2930
* @author Daniel Espendiller <[email protected]>
3031
*/
3132
public class XmlHelper {
33+
public static final PsiElementPattern.Capture<PsiElement> XML_EXTENSION = PlatformPatterns.psiElement().inFile(PlatformPatterns.psiFile().with(new PatternCondition<PsiElement>("xml extension") {
34+
@Override
35+
public boolean accepts(@NotNull PsiElement psiElement, ProcessingContext processingContext) {
36+
PsiFile containingFile = psiElement.getContainingFile();
37+
return containingFile != null && isXmlFileExtension(containingFile);
38+
}
39+
}));
40+
3241
public static PsiElementPattern.Capture<PsiElement> getTagPattern(String... tags) {
3342
return XmlPatterns
3443
.psiElement()

src/main/java/fr/adrienbrault/idea/symfony2plugin/config/xml/XmlReferenceContributor.java

Lines changed: 46 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,19 @@ public void registerReferenceProviders(PsiReferenceRegistrar registrar) {
3636
// <argument type="service" id="service_container" />
3737
// <service alias="Foobar" />
3838
registrar.registerReferenceProvider(
39-
PlatformPatterns.or(XmlHelper.getArgumentServiceIdPattern(), XmlHelper.getServiceAliasPattern()),
39+
PlatformPatterns.and(XmlHelper.XML_EXTENSION, PlatformPatterns.or(XmlHelper.getArgumentServiceIdPattern(), XmlHelper.getServiceAliasPattern())),
4040
new ServiceReferenceProvider()
4141
);
4242

4343
// <factory service="factory_service" />
4444
registrar.registerReferenceProvider(
45-
XmlHelper.getFactoryServiceCompletionPattern(),
45+
PlatformPatterns.and(XmlHelper.XML_EXTENSION, XmlHelper.getFactoryServiceCompletionPattern()),
4646
new ServiceReferenceProvider()
4747
);
4848

4949
// <autowiring-type>Acme\TransformerInterface</autowiring-type>
5050
registrar.registerReferenceProvider(
51-
XmlHelper.getAutowiringTypePattern(),
51+
PlatformPatterns.and(XmlHelper.XML_EXTENSION, XmlHelper.getAutowiringTypePattern()),
5252
new PsiReferenceProvider() {
5353
@NotNull
5454
@Override
@@ -71,20 +71,20 @@ public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @No
7171
// <service class="%foo.class%">
7272
// <service class="Class\Name">
7373
registrar.registerReferenceProvider(
74-
XmlHelper.getServiceClassAttributeWithIdPattern(),
74+
PlatformPatterns.and(XmlHelper.XML_EXTENSION, XmlHelper.getServiceClassAttributeWithIdPattern()),
7575
new ClassPsiReferenceProvider()
7676
);
7777

7878
// Symfony 3.3 shortcut
7979
// <service id="Class\Name">
8080
registrar.registerReferenceProvider(
81-
XmlHelper.getServiceIdAttributePattern(),
81+
PlatformPatterns.and(XmlHelper.XML_EXTENSION, XmlHelper.getServiceIdAttributePattern()),
8282
new ClassAsIdPsiReferenceProvider()
8383
);
8484

8585
// <parameter key="fos_user.user_manager.class">FOS\UserBundle\Doctrine\UserManager</parameter>
8686
registrar.registerReferenceProvider(
87-
XmlHelper.getParameterClassValuePattern(),
87+
PlatformPatterns.and(XmlHelper.XML_EXTENSION, XmlHelper.getParameterClassValuePattern()),
8888
new PsiReferenceProvider() {
8989
@NotNull
9090
@Override
@@ -104,7 +104,7 @@ public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @No
104104

105105
// <argument>%form.resolved_type_factory.class%</argument>
106106
registrar.registerReferenceProvider(
107-
XmlHelper.getArgumentValuePattern(),
107+
PlatformPatterns.and(XmlHelper.XML_EXTENSION, XmlHelper.getArgumentValuePattern()),
108108
new PsiReferenceProvider() {
109109
@NotNull
110110
@Override
@@ -126,7 +126,7 @@ public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @No
126126

127127
// <argument type="constant">Foobar\Foo</argument>
128128
registrar.registerReferenceProvider(
129-
XmlHelper.getArgumentValueWithTypePattern("constant"),
129+
PlatformPatterns.and(XmlHelper.XML_EXTENSION, XmlHelper.getArgumentValueWithTypePattern("constant")),
130130
new PsiReferenceProvider() {
131131
@NotNull
132132
@Override
@@ -152,9 +152,12 @@ public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @No
152152

153153
// <tag name="kernel.event_subscriber" />
154154
registrar.registerReferenceProvider(
155-
XmlHelper.getTagAttributePattern("tag", "name")
156-
.inside(XmlHelper.getInsideTagPattern("services"))
157-
.inFile(XmlHelper.getXmlFilePattern()),
155+
PlatformPatterns.and(
156+
XmlHelper.XML_EXTENSION,
157+
XmlHelper.getTagAttributePattern("tag", "name")
158+
.inside(XmlHelper.getInsideTagPattern("services"))
159+
.inFile(XmlHelper.getXmlFilePattern())
160+
),
158161

159162
new PsiReferenceProvider() {
160163

@@ -178,43 +181,56 @@ public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNu
178181

179182
// <tag event="foo" method="kernel.event_subscriber" />
180183
registrar.registerReferenceProvider(
181-
XmlHelper.getTagAttributePattern("tag", "method")
182-
.inside(XmlHelper.getInsideTagPattern("services"))
183-
.inFile(XmlHelper.getXmlFilePattern()),
184+
PlatformPatterns.and(
185+
XmlHelper.XML_EXTENSION,
186+
XmlHelper.getTagAttributePattern("tag", "method")
187+
.inside(XmlHelper.getInsideTagPattern("services"))
188+
.inFile(XmlHelper.getXmlFilePattern())
189+
),
184190
new ClassMethodReferenceProvider()
185191
);
186192

187193
registrar.registerReferenceProvider(
188-
XmlHelper.getTagAttributePattern("call", "method")
189-
.inside(XmlHelper.getInsideTagPattern("services"))
190-
.inFile(XmlHelper.getXmlFilePattern()),
194+
PlatformPatterns.and(
195+
XmlHelper.XML_EXTENSION,
196+
XmlHelper.getTagAttributePattern("call", "method")
197+
.inside(XmlHelper.getInsideTagPattern("services"))
198+
.inFile(XmlHelper.getXmlFilePattern())
199+
),
191200
new ClassMethodReferenceProvider()
192201
);
193202

194203
// <factory class="AppBundle\Trivago\ConfigFactory"/>
195204
registrar.registerReferenceProvider(
196-
XmlHelper.getTagAttributePattern("factory", "class")
197-
.inFile(XmlHelper.getXmlFilePattern()),
205+
PlatformPatterns.and(
206+
XmlHelper.XML_EXTENSION,
207+
XmlHelper.getTagAttributePattern("factory", "class")
208+
.inFile(XmlHelper.getXmlFilePattern())
209+
),
198210
new ClassPsiReferenceProvider()
199211
);
200212

201213
// <factory class="AppBundle\Trivago\ConfigFactory" method="create"/>
202214
// <factory service="foo" method="create"/>
203215
registrar.registerReferenceProvider(
204-
XmlHelper.getTagAttributePattern("factory", "method")
205-
.inside(XmlHelper.getInsideTagPattern("services"))
206-
.inFile(XmlHelper.getXmlFilePattern()),
216+
PlatformPatterns.and(
217+
XmlHelper.XML_EXTENSION,
218+
XmlHelper.getTagAttributePattern("factory", "method")
219+
.inside(XmlHelper.getInsideTagPattern("services"))
220+
.inFile(XmlHelper.getXmlFilePattern())
221+
),
207222
new ChainPsiReferenceProvider(
208223
new FactoryClassMethodPsiReferenceProvider(),
209224
new FactoryServiceMethodPsiReferenceProvider()
210225
)
211226
);
212227

213228
registrar.registerReferenceProvider(
214-
215-
XmlHelper.getParameterWithClassEndingPattern()
216-
.inside(XmlHelper.getInsideTagPattern("parameters"))
217-
.inFile(XmlHelper.getXmlFilePattern()
229+
PlatformPatterns.and(
230+
XmlHelper.XML_EXTENSION,
231+
XmlHelper.getParameterWithClassEndingPattern()
232+
.inside(XmlHelper.getInsideTagPattern("parameters"))
233+
.inFile(XmlHelper.getXmlFilePattern())
218234
),
219235
new PsiReferenceProvider() {
220236

@@ -238,7 +254,10 @@ public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNu
238254
);
239255

240256
registrar.registerReferenceProvider(
241-
XmlHelper.getTagAttributePattern("tag", "event").inside(XmlHelper.getInsideTagPattern("services")),
257+
PlatformPatterns.and(
258+
XmlHelper.XML_EXTENSION,
259+
XmlHelper.getTagAttributePattern("tag", "event").inside(XmlHelper.getInsideTagPattern("services"))
260+
),
242261
new PsiReferenceProvider() {
243262

244263
@NotNull

src/main/java/fr/adrienbrault/idea/symfony2plugin/routing/RouteXmlReferenceContributor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fr.adrienbrault.idea.symfony2plugin.routing;
22

3+
import com.intellij.patterns.PlatformPatterns;
34
import com.intellij.psi.*;
45
import com.intellij.psi.xml.XmlAttribute;
56
import com.intellij.psi.xml.XmlText;
@@ -17,7 +18,7 @@ public class RouteXmlReferenceContributor extends PsiReferenceContributor {
1718
@Override
1819
public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
1920
registrar.registerReferenceProvider(
20-
XmlHelper.getRouteControllerPattern(),
21+
PlatformPatterns.and(XmlHelper.XML_EXTENSION, XmlHelper.getRouteControllerPattern()),
2122
new PsiReferenceProvider() {
2223
@NotNull
2324
@Override

0 commit comments

Comments
 (0)