Skip to content

Commit 722076a

Browse files
committed
#1366 mark classed used if its tagged via "kernel.event_listener" server defintion
1 parent 70bd16b commit 722076a

File tree

4 files changed

+31
-2
lines changed

4 files changed

+31
-2
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/codeInsight/SymfonyImplicitUsageProvider.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,21 @@ public boolean isImplicitUsage(@NotNull PsiElement element) {
3838
|| isVoter((PhpClass) element)
3939
|| isTwigExtension((PhpClass) element)
4040
|| isEntityRepository((PhpClass) element)
41-
|| isConstraint((PhpClass) element);
41+
|| isConstraint((PhpClass) element)
42+
|| isKernelEventListener((PhpClass) element);
4243
}
4344

4445
return false;
4546
}
4647

48+
private boolean isKernelEventListener(@NotNull PhpClass phpClass) {
49+
if (!ServiceUtil.isPhpClassAService(phpClass)) {
50+
return false;
51+
}
52+
53+
return ServiceUtil.isPhpClassTaggedWith(phpClass, "kernel.event_listener");
54+
}
55+
4756
private boolean isConstraint(@NotNull PhpClass phpClass) {
4857
if(!PhpElementsUtil.isInstanceOf(phpClass, "\\Symfony\\Component\\Validator\\Constraint")) {
4958
return false;

src/main/java/fr/adrienbrault/idea/symfony2plugin/util/dict/ServiceUtil.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,11 @@ public static Collection<PhpClass> getTaggedClasses(@NotNull Project project, @N
339339
return phpClasses;
340340
}
341341

342+
public static boolean isPhpClassTaggedWith(@NotNull PhpClass phpClass, @NotNull String tagName) {
343+
return ServiceUtil.getTaggedClasses(phpClass.getProject(), tagName).stream()
344+
.anyMatch(phpClass1 -> phpClass1.getFQN().equalsIgnoreCase(phpClass1.getFQN()));
345+
}
346+
342347
@NotNull
343348
public static Collection<PhpClass> getTaggedClassesWithCompiled(@NotNull Project project, @NotNull String tagName) {
344349

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/codeInsight/SymfonyImplicitUsageProviderTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,16 @@ public void testConstraintValidatorReferenceIsMarkedAsUsed() {
167167
assertTrue(new SymfonyImplicitUsageProvider().isImplicitUsage(firstClassFromFile));
168168
}
169169

170+
public void testClassWithTaggedEventListenerIsMarkedAsUsed() {
171+
PsiFile psiFile = myFixture.configureByText(PhpFileType.INSTANCE, "<?php\n" +
172+
"namespace App\\EventListener;\n" +
173+
"class ExceptionListener {}\n"
174+
);
175+
176+
PhpClass firstClassFromFile = PhpElementsUtil.getFirstClassFromFile((PhpFile) psiFile.getContainingFile());
177+
assertTrue(new SymfonyImplicitUsageProvider().isImplicitUsage(firstClassFromFile));
178+
}
179+
170180
public void testEventSubscriberGetSubscribedEventsArray() {
171181
PsiFile psiFile = myFixture.configureByText(PhpFileType.INSTANCE, "<?php\n" +
172182
"<?php\n" +

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/codeInsight/fixtures/services.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,9 @@ services:
1212
class: App\Voter\MyFoobarVoter
1313

1414
foo_command.twig_extension:
15-
class: App\TwigExtension\MyTwigExtension
15+
class: App\TwigExtension\MyTwigExtension
16+
17+
foo_command.eventListener_exception:
18+
class: App\EventListener\ExceptionListener
19+
tags:
20+
- { name: kernel.event_listener, event: kernel.exception }

0 commit comments

Comments
 (0)