8000 add service resolving for tool box provider and provide tests · Koc/idea-php-symfony2-plugin@1f6b8b4 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1f6b8b4

Browse files
committed
add service resolving for tool box provider and provide tests
1 parent 91941ae commit 1f6b8b4

File tree

4 files changed

+96
-1
lines changed

4 files changed

+96
-1
lines changed

src/fr/adrienbrault/idea/symfony2plugin/external/toolbox/provider/ServiceToolboxProvider.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
import com.intellij.codeInsight.lookup.LookupElement;
44
import com.intellij.psi.PsiElement;
55
import com.jetbrains.php.lang.psi.elements.PhpClass;
6+
import com.jetbrains.php.lang.psi.elements.PhpNamedElement;
67
import de.espend.idea.php.toolbox.completion.dict.PhpToolboxCompletionContributorParameter;
78
import de.espend.idea.php.toolbox.extension.PhpToolboxProviderAbstract;
89
import de.espend.idea.php.toolbox.navigation.dict.PhpToolboxDeclarationHandlerParameter;
910
import de.espend.idea.php.toolbox.provider.presentation.ProviderParameter;
1011
import de.espend.idea.php.toolbox.provider.presentation.ProviderPresentation;
12+
import de.espend.idea.php.toolbox.type.PhpToolboxTypeProviderArguments;
13+
import de.espend.idea.php.toolbox.type.PhpToolboxTypeProviderInterface;
1114
import fr.adrienbrault.idea.symfony2plugin.Symfony2Icons;
1215
import fr.adrienbrault.idea.symfony2plugin.dic.ContainerService;
1316
import fr.adrienbrault.idea.symfony2plugin.dic.ServiceStringLookupElement;
@@ -25,7 +28,7 @@
2528
/**
2629
* @author Daniel Espendiller <daniel@espendiller.net>
2730
*/
28-
public class ServiceToolboxProvider extends PhpToolboxProviderAbstract {
31+
public class ServiceToolboxProvider extends PhpToolboxProviderAbstract implements PhpToolboxTypeProviderInterface {
2932

3033
@NotNull
3134
@Override
@@ -94,4 +97,17 @@ public ProviderParameter[] getParameter() {
9497
}
9598
};
9699
}
100+
101+
@Nullable
102+
@Override
103+
public Collection<PhpNamedElement> resolveParameter(@NotNull PhpToolboxTypeProviderArguments arguments) {
104+
PhpClass serviceClass = ServiceUtil.getServiceClass(arguments.getProject(), arguments.getParameter());
105+
if(serviceClass == null) {
106+
return null;
107+
}
108+
109+
return new ArrayList<PhpNamedElement>(){{
110+
add(serviceClass);
111+
}};
112+
}
97113
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package fr.adrienbrault.idea.symfony2plugin.tests.external.toolbox.provider;
2+
3+
import com.intellij.psi.PsiElement;
4+
import com.intellij.util.containers.ContainerUtil;
5+
import com.jetbrains.php.lang.PhpFileType;
6+
import com.jetbrains.php.lang.psi.PhpPsiElementFactory;
7+
import com.jetbrains.php.lang.psi.elements.PhpClass;
8+
import com.jetbrains.php.lang.psi.elements.PhpNamedElement;
9+
import de.espend.idea.php.toolbox.navigation.dict.PhpToolboxDeclarationHandlerParameter;
10+
import de.espend.idea.php.toolbox.type.PhpToolboxTypeProviderArguments;
11+
import fr.adrienbrault.idea.symfony2plugin.external.toolbox.provider.ServiceToolboxProvider;
12+
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
13+
14+
import java.io.File;
15+
import java.util.ArrayList;
16+
import java.util.Collection;
17+
18+
public class ServiceToolboxProviderTest extends SymfonyLightCodeInsightFixtureTestCase {
19+
public void setUp() throws Exception {
20+
super.setUp();
21+
myFixture.copyFileToProject("services.xml");
22+
myFixture.copyFileToProject("classes.php");
23+
}
24+
25+
public String getTestDataPath() {
26+
return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath();
27+
}
28+
29+
/**
30+
* @see ServiceToolboxProvider#resolveParameter
31+
*/
32+
public void testTypeResolve() {
33+
ServiceToolboxProvider provider = new ServiceToolboxProvider();
34+
Collection<PhpNamedElement> classes = provider.resolveParameter(
35+
new PhpToolboxTypeProviderArguments(getProject(), "foo_bar_foo_Bar", new ArrayList<>())
36+
);
37+
38+
assertNotNull(classes);
39+
assertNotNull(ContainerUtil.find(classes, phpNamedElement ->
40+
phpNamedElement instanceof PhpClass && "FooBar".equals(phpNamedElement.getName()))
41+
);
42+
}
43+
44+
/**
45+
* @see ServiceToolboxProvider#resolveParameter
46+
*/
47+
public void testTypeNullResolve() {
48+
assertNull(new ServiceToolboxProvider().resolveParameter(
49+
new PhpToolboxTypeProviderArguments(getProject(), "unknown_xxx", new ArrayList<>())
50+
));
51+
}
52+
53+
/**
54+
* @see ServiceToolboxProvider#getPsiTargets
55+
*/
56+
public void testTargetIsReturnedForService() {
57+
Collection<PsiElement> classes = new ServiceToolboxProvider().getPsiTargets(
58+
new PhpToolboxDeclarationHandlerParameter(PhpPsiElementFactory.createComma(getProject()), "foo_bar_foo_Bar", PhpFileType.INSTANCE)
59+
);
60+
61+
assertNotNull(classes);
62+
assertNotNull(ContainerUtil.find(classes, phpNamedElement ->
63+
phpNamedElement instanceof PhpClass && "FooBar".equals(((PhpClass) phpNamedElement).getName()))
64+
);
65+
}
66+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?php
2+
3+
namespace Foo\Bar {
4+
class FooBar {}
5+
}
6+
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<container>
4+
<services>
5+
<service id="foo_bar_foo_Bar" class="Foo\Bar\FooBar"/>
6+
</services>
7+
</container>

0 commit comments

Comments
 (0)
0