Skip to content

Commit 676866d

Browse files
committed
Controller::redirectToRoute should provide routing auto completion #614
1 parent 5505137 commit 676866d

File tree

4 files changed

+75
-2
lines changed

4 files changed

+75
-2
lines changed

src/fr/adrienbrault/idea/symfony2plugin/routing/PhpRouteReferenceContributor.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@
1818
public class PhpRouteReferenceContributor extends PsiReferenceContributor {
1919

2020
public static MethodMatcher.CallToSignature[] GENERATOR_SIGNATURES = new MethodMatcher.CallToSignature[] {
21-
new MethodMatcher.CallToSignature("\\Symfony\\Component\\Routing\\Generator\\UrlGeneratorInterface", "generate"),
2221
new MethodMatcher.CallToSignature("\\Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller", "generateUrl"),
22+
new MethodMatcher.CallToSignature("\\Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller", "redirectToRoute"),
23+
new MethodMatcher.CallToSignature("\\Symfony\\Component\\Routing\\Generator\\UrlGeneratorInterface", "generate"),
2324
};
2425

2526
private static MethodMatcher.CallToSignature[] FORWARD_SIGNATURES = new MethodMatcher.CallToSignature[] {

tests/fr/adrienbrault/idea/symfony2plugin/tests/SymfonyLightCodeInsightFixtureTestCase.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,12 @@ public void assertPhpReferenceResolveTo(LanguageFileType languageFileType, Strin
285285
fail("Element is not PhpReference.");
286286
}
287287

288-
assertTrue(pattern.accepts(((PhpReference) psiElement).resolve()));
288+
PsiElement resolve = ((PhpReference) psiElement).resolve();
289+
if(!pattern.accepts(resolve)) {
290+
fail(String.format("failed pattern matches element of '%s'", resolve == null ? "null" : resolve.toString()));
291+
}
292+
293+
assertTrue(pattern.accepts(resolve));
289294
}
290295

291296
public void assertPhpReferenceNotResolveTo(LanguageFileType languageFileType, String configureByText, ElementPattern<?> pattern) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package fr.adrienbrault.idea.symfony2plugin.tests.routing;
2+
3+
import com.intellij.patterns.PlatformPatterns;
4+
import com.jetbrains.php.lang.PhpFileType;
5+
import com.jetbrains.php.lang.documentation.phpdoc.psi.PhpDocComment;
6+
import com.jetbrains.php.lang.psi.PhpFile;
7+
import com.jetbrains.php.lang.psi.elements.Method;
8+
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
9+
10+
import java.io.File;
11+
12+
/**
13+
* @author Daniel Espendiller <daniel@espendiller.net>
14+
*
15+
* @see fr.adrienbrault.idea.symfony2plugin.routing.PhpRouteReferenceContributor
16+
*/
17+
public class PhpRouteReferenceContributorTest extends SymfonyLightCodeInsightFixtureTestCase {
18+
19+
20+
public void setUp() throws Exception {
21+
super.setUp();
22+
23+
myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("PhpRouteReferenceContributor.php"));
24+
}
25+
26+
protected String getTestDataPath() {
27+
return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath();
28+
}
29+
30+
public void testGenerateUrlProvidesNavigation() {
31+
assertCompletionContains(PhpFileType.INSTANCE, "<?php\n" +
32+
"/** @var $f \\Symfony\\Component\\Routing\\Generator\\UrlGeneratorInterface */\n" +
33+
"$f->generate('<caret>')"
34+
, "foo_bar");
35+
}
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace Sensio\Bundle\FrameworkExtraBundle\Configuration
4+
{
5+
interface Route
6+
{
7+
}
8+
}
9+
10+
namespace Foo\Route
11+
{
12+
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
13+
14+
class MyController
15+
{
16+
17+
/**
18+
* @Route("/foo/{bar}", name = "foo_bar")
19+
*/
20+
public function myAction($bar)
21+
{
22+
}
23+
}
24+
}
25+
26+
namespace Symfony\Component\Routing\Generator
27+
{
28+
interface UrlGeneratorInterface {
29+
public function generate();
30+
};
31+
}

0 commit comments

Comments
 (0)