Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /