Skip to content

Commit 6133ea9

Browse files
committed
Deprecated ParameterLanguageInjector in favour of StringLiteralLanguageInjector
1 parent e70d375 commit 6133ea9

File tree

6 files changed

+104
-1
lines changed

6 files changed

+104
-1
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/lang/LanguageInjection.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ public Builder matchingMethodCallArgument(@NotNull String classFQN, @NotNull Str
9999
return matchingPattern(LanguageInjectionPatterns.getMethodCallArgumentPattern(classFQN, methodName, argumentName, argumentIndex));
100100
}
101101

102+
public Builder matchingVariableAssigment(@NotNull String variableName) {
103+
return matchingPattern(LanguageInjectionPatterns.getVariableAssignmentPattern(variableName));
104+
}
105+
102106
public LanguageInjection build() {
103107
return new LanguageInjection(languageId, prefix, suffix, StandardPatterns.or(patterns.toArray(new ElementPattern[0])));
104108
}

src/main/java/fr/adrienbrault/idea/symfony2plugin/lang/LanguageInjectionPatterns.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,17 @@ public static ElementPattern<? extends PsiElement> getFunctionCallArgumentPatter
9292
);
9393
}
9494

95+
public static ElementPattern<? extends PsiElement> getVariableAssignmentPattern(@NotNull String variableName) {
96+
return PlatformPatterns.psiElement()
97+
.withParent(PlatformPatterns
98+
.psiElement(AssignmentExpression.class)
99+
.withFirstChild(PlatformPatterns
100+
.psiElement(Variable.class)
101+
.withName(variableName)
102+
)
103+
);
104+
}
105+
95106
private static class IsAnnotationProperty extends PatternCondition<StringLiteralExpression> {
96107
@NotNull
97108
private final String classFQN;

src/main/java/fr/adrienbrault/idea/symfony2plugin/lang/ParameterLanguageInjector.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.util.Collections;
1717
import java.util.List;
1818

19+
@Deprecated
1920
public class ParameterLanguageInjector implements MultiHostInjector {
2021

2122
private static final MethodMatcher.CallToSignature[] CSS_SELECTOR_SIGNATURES = {

src/main/java/fr/adrienbrault/idea/symfony2plugin/lang/StringLiteralLanguageInjector.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,33 @@
1212

1313
public class StringLiteralLanguageInjector implements MultiHostInjector {
1414

15+
public static final String LANGUAGE_ID_CSS = "CSS";
16+
public static final String LANGUAGE_ID_XPATH = "XPath";
17+
public static final String LANGUAGE_ID_JSON = "JSON";
18+
public static final String LANGUAGE_ID_DQL = "DQL";
1519
public static final String LANGUAGE_ID_EXPRESSION_LANGUAGE = "Symfony Expression Language";
1620

1721
private final LanguageInjection[] LANGUAGE_INJECTIONS = {
22+
new LanguageInjection.Builder(LANGUAGE_ID_CSS)
23+
.withPrefix("@media all { ")
24+
.withSuffix(" }")
25+
.matchingMethodCallArgument("\\Symfony\\Component\\DomCrawler\\Crawler", "filter", "selector", 0)
26+
.matchingMethodCallArgument("\\Symfony\\Component\\DomCrawler\\Crawler", "children", "selector", 0)
27+
.matchingMethodCallArgument("\\Symfony\\Component\\CssSelector\\CssSelectorConverter", "toXPath", "cssExpr", 0)
28+
.build(),
29+
new LanguageInjection.Builder(LANGUAGE_ID_XPATH)
30+
.matchingMethodCallArgument("\\Symfony\\Component\\DomCrawler\\Crawler", "filterXPath", "xpath", 0)
31+
.matchingMethodCallArgument("\\Symfony\\Component\\DomCrawler\\Crawler", "evaluate", "xpath", 0)
32+
.build(),
33+
new LanguageInjection.Builder(LANGUAGE_ID_JSON)
34+
.matchingMethodCallArgument("\\Symfony\\Component\\HttpFoundation\\JsonResponse", "fromJsonString", "data", 0)
35+
.matchingMethodCallArgument("\\Symfony\\Component\\HttpFoundation\\JsonResponse", "setJson", "json", 0)
36+
.build(),
37+
new LanguageInjection.Builder(LANGUAGE_ID_DQL)
38+
.matchingMethodCallArgument("\\Doctrine\\ORM\\EntityManager", "createQuery", "dql", 0)
39+
.matchingMethodCallArgument("\\Doctrine\\ORM\\Query", "setDQL", "dqlQuery", 0)
40+
.matchingVariableAssigment("dql")
41+
.build(),
1842
new LanguageInjection.Builder(LANGUAGE_ID_EXPRESSION_LANGUAGE)
1943
.matchingConstructorCallArgument("\\Symfony\\Component\\ExpressionLanguage\\Expression", "expression", 0)
2044
.matchingFunctionCallArgument("\\Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\expr", "expression", 0)

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/lang/ParameterLanguageInjectorTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
import com.jetbrains.php.lang.PhpFileType;
77
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
88
import junit.framework.TestCase;
9+
import org.junit.Ignore;
910

1011
import static fr.adrienbrault.idea.symfony2plugin.lang.ParameterLanguageInjector.*;
1112

13+
@Deprecated
14+
@Ignore("ParameterLanguageInjectorTest is deprecated")
1215
public class ParameterLanguageInjectorTest extends SymfonyLightCodeInsightFixtureTestCase {
1316

1417
private InjectionTestFixture injectionTestFixture;

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/lang/StringLiteralLanguageInjectorTest.java

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
package fr.adrienbrault.idea.symfony2plugin.tests.lang;
22

3+
import com.intellij.psi.PsiElement;
34
import com.intellij.testFramework.fixtures.InjectionTestFixture;
45
import com.jetbrains.php.lang.PhpFileType;
56
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
7+
import junit.framework.TestCase;
68
import org.jetbrains.annotations.NotNull;
9+
import org.jetbrains.annotations.Nullable;
710

11+
import static fr.adrienbrault.idea.symfony2plugin.lang.StringLiteralLanguageInjector.LANGUAGE_ID_CSS;
12+
import static fr.adrienbrault.idea.symfony2plugin.lang.StringLiteralLanguageInjector.LANGUAGE_ID_DQL;
813
import static fr.adrienbrault.idea.symfony2plugin.lang.StringLiteralLanguageInjector.LANGUAGE_ID_EXPRESSION_LANGUAGE;
14+
import static fr.adrienbrault.idea.symfony2plugin.lang.StringLiteralLanguageInjector.LANGUAGE_ID_JSON;
15+
import static fr.adrienbrault.idea.symfony2plugin.lang.StringLiteralLanguageInjector.LANGUAGE_ID_XPATH;
916

1017
public class StringLiteralLanguageInjectorTest extends SymfonyLightCodeInsightFixtureTestCase {
1118

@@ -22,6 +29,52 @@ public String getTestDataPath() {
2229
return "src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/lang/fixtures";
2330
}
2431

32+
public void skipTestCssLanguageInjections() {
33+
// skip as we dont have CSS module in >= 2020 test builds
34+
String base = "<?php $c = new \\Symfony\\Component\\DomCrawler\\Crawler();\n";
35+
assertInjectedLangAtCaret(base + "$c->filter('html > bo<caret>dy');", LANGUAGE_ID_CSS);
36+
assertInjectedLangAtCaret(base + "$c->filter('<caret>');", LANGUAGE_ID_CSS);
37+
assertInjectedLangAtCaret(base + "$c->children('html > bo<caret>dy');", LANGUAGE_ID_CSS);
38+
assertInjectedLangAtCaret(base + "$c->children('<caret>');", LANGUAGE_ID_CSS);
39+
40+
base = "<?php $c = new \\Symfony\\Component\\CssSelector\\CssSelectorConverter();\n";
41+
assertInjectedLangAtCaret(base + "$c->toXPath('html > bo<caret>dy');", LANGUAGE_ID_CSS);
42+
assertInjectedLangAtCaret(base + "$c->toXPath('<caret>');", LANGUAGE_ID_CSS);
43+
}
44+
45+
public void testXPathLanguageInjections() {
46+
String base = "<?php $c = new \\Symfony\\Component\\DomCrawler\\Crawler();\n";
47+
assertInjectedLangAtCaret(base + "$c->filterXPath('//dum<caret>my');", LANGUAGE_ID_XPATH);
48+
assertInjectedLangAtCaret(base + "$c->filterXPath('<caret>');", LANGUAGE_ID_XPATH);
49+
assertInjectedLangAtCaret(base + "$c->evaluate('//dum<caret>my');", LANGUAGE_ID_XPATH);
50+
assertInjectedLangAtCaret(base + "$c->evaluate('<caret>');", LANGUAGE_ID_XPATH);
51+
}
52+
53+
public void testJsonLanguageInjections() {
54+
String base = "<?php \\Symfony\\Component\\HttpFoundation\\";
55+
assertInjectedLangAtCaret(base + "JsonResponse::fromJsonString('<caret>');", LANGUAGE_ID_JSON);
56+
assertInjectedLangAtCaret(base + "JsonResponse::fromJsonString('{\"foo\": <caret>}');", LANGUAGE_ID_JSON);
57+
58+
base = "<?php $r = new \\Symfony\\Component\\HttpFoundation\\JsonResponse();\n";
59+
assertInjectedLangAtCaret(base + "$r->setJson('<caret>');", LANGUAGE_ID_JSON);
60+
assertInjectedLangAtCaret(base + "$r->setJson('{\"foo\": <caret>}');", LANGUAGE_ID_JSON);
61+
}
62+
63+
public void testDqlLanguageInjections() {
64+
String base = "<?php $em = new \\Doctrine\\ORM\\EntityManager();\n";
65+
assertInjectedLangAtCaret(base + "$em->createQuery('SELECT b FR<caret>OM \\Foo\\Bar b');", LANGUAGE_ID_DQL);
66+
assertInjectedLangAtCaret(base + "$em->createQuery('<caret>');", LANGUAGE_ID_DQL);
67+
assertInjectedLangAtCaret(base + "$em->createQuery(<<caret><<AAA\n \nAAA\n);", null);
68+
assertInjectedFragmentText(base + "$em->createQuery(<<<AAA\nSELEC<caret>T\nAAA\n);", "SELECT");
69+
assertInjectedFragmentText(base + "$em->createQuery(<<<'AAA'\nSELEC<caret>T a\nAAA\n);", "SELECT a");
70+
base = "<?php $q = new \\Doctrine\\ORM\\Query();\n";
71+
assertInjectedLangAtCaret(base + "$q->setDQL('SELECT b FR<caret>OM \\Foo\\Bar b');", LANGUAGE_ID_DQL);
72+
assertInjectedLangAtCaret(base + "$q->setDQL('<caret>');", LANGUAGE_ID_DQL);
73+
74+
assertInjectedLangAtCaret("<?php $dql = \"SELECT b FR<caret>OM \\Foo\\Bar b\");", LANGUAGE_ID_DQL);
75+
assertInjectedLangAtCaret("<?php $dql = \"<caret>\");", LANGUAGE_ID_DQL);
76+
}
77+
2578
public void testExpressionLanguageLanguageInjections() {
2679
assertInjectedLangAtCaret(
2780
"<?php $expr = new \\Symfony\\Component\\ExpressionLanguage\\Expression('<caret>');",
@@ -327,8 +380,15 @@ public void testExpressionLanguageLanguageInjections() {
327380
);
328381
}
329382

330-
private void assertInjectedLangAtCaret(@NotNull String configureByText, @NotNull String lang) {
383+
private void assertInjectedLangAtCaret(@NotNull String configureByText, @Nullable String lang) {
331384
myFixture.configureByText(PhpFileType.INSTANCE, configureByText);
332385
injectionTestFixture.assertInjectedLangAtCaret(lang);
333386
}
387+
388+
private void assertInjectedFragmentText(@NotNull String configureByText, String text) {
389+
myFixture.configureByText(PhpFileType.INSTANCE, configureByText);
390+
PsiElement injectedElement = injectionTestFixture.getInjectedElement();
391+
assertNotNull(injectedElement);
392+
TestCase.assertEquals(text, injectedElement.getContainingFile().getText());
393+
}
334394
}

0 commit comments

Comments
 (0)