Skip to content

Commit 51dab69

Browse files
authored
Merge pull request #1903 from Haehnchen/feature/1366-voter-tags
#1366 mark registered voter class as used code
2 parents 941c104 + 8b71e28 commit 51dab69

File tree

4 files changed

+28
-1
lines changed

4 files changed

+28
-1
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,18 @@ public boolean isImplicitUsage(@NotNull PsiElement element) {
3232
} else if (element instanceof PhpClass) {
3333
return isRouteClass((PhpClass) element)
3434
|| isCommandAndService((PhpClass) element)
35-
|| isSubscribedEvent((PhpClass) element);
35+
|| isSubscribedEvent((PhpClass) element)
36+
|| isVoter((PhpClass) element);
3637
}
3738

3839
return false;
3940
}
4041

42+
private boolean isVoter(PhpClass phpClass) {
43+
return PhpElementsUtil.isInstanceOf(phpClass, "\\Symfony\\Component\\Security\\Core\\Authorization\\Voter\\VoterInterface")
44+
&& ServiceUtil.isPhpClassAService(phpClass);
45+
}
46+
4147
private boolean isRouteClass(@NotNull PhpClass phpClass) {
4248
return phpClass.getMethods()
4349
.stream()

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
@@ -137,6 +137,16 @@ public void testCommandRegisteredNotAsServiceIsUntouched() {
137137
assertFalse(new SymfonyImplicitUsageProvider().isImplicitUsage(firstClassFromFile));
138138
}
139139

140+
public void testVoterRegisteredAsServiceAreMarkedUsed() {
141+
PsiFile psiFile = myFixture.configureByText(PhpFileType.INSTANCE, "<?php\n" +
142+
"namespace App\\Voter;\n" +
143+
"class MyFoobarVoter implements \\Symfony\\Component\\Security\\Core\\Authorization\\Voter\\VoterInterface {}"
144+
);
145+
146+
PhpClass firstClassFromFile = PhpElementsUtil.getFirstClassFromFile((PhpFile) psiFile.getContainingFile());
147+
assertTrue(new SymfonyImplicitUsageProvider().isImplicitUsage(firstClassFromFile));
148+
}
149+
140150
public void testEventSubscriberGetSubscribedEventsArray() {
141151
PsiFile psiFile = myFixture.configureByText(PhpFileType.INSTANCE, "<?php\n" +
142152
"<?php\n" +

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/codeInsight/fixtures/classes.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,12 @@ interface EventSubscriberInterface
2121
{
2222
public static function getSubscribedEvents();
2323
}
24+
}
25+
26+
namespace Symfony\Component\Security\Core\Authorization\Voter
27+
{
28+
interface VoterInterface
29+
{
30+
public function vote(TokenInterface $token, $subject, array $attributes);
31+
}
2432
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,6 @@ services:
77

88
foo_command.foo_command:
99
class: App\Command\FooCommand
10+
11+
foo_command.my_foobar_voter:
12+
class: App\Voter\MyFoobarVoter

0 commit comments

Comments
 (0)