diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/lang/ParameterLanguageInjector.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/lang/ParameterLanguageInjector.java
index 697ff74bd..27a464fba 100644
--- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/lang/ParameterLanguageInjector.java
+++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/lang/ParameterLanguageInjector.java
@@ -40,17 +40,29 @@ public class ParameterLanguageInjector implements MultiHostInjector {
new MethodMatcher.CallToSignature("\\Doctrine\\ORM\\Query", "setDQL"),
};
+ private static final MethodMatcher.CallToSignature[] RESET_INJECTION_SIGNATURES = {
+ new MethodMatcher.CallToSignature("\\Symfony\\Component\\Console\\Output\\OutputInterface", "write"),
+ new MethodMatcher.CallToSignature("\\Symfony\\Component\\Console\\Output\\OutputInterface", "writeln"),
+ new MethodMatcher.CallToSignature("\\Symfony\\Component\\Console\\Output\\Output", "write"),
+ new MethodMatcher.CallToSignature("\\Symfony\\Component\\Console\\Output\\Output", "writeln"),
+ new MethodMatcher.CallToSignature("\\Symfony\\Component\\Console\\Formatter\\OutputFormatter", "escape"),
+ new MethodMatcher.CallToSignature("\\Symfony\\Component\\Console\\Formatter\\OutputFormatter", "escapeTrailingBackslash"),
+ new MethodMatcher.CallToSignature("\\Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface", "format"),
+ };
+
private final MethodLanguageInjection[] LANGUAGE_INJECTIONS = {
new MethodLanguageInjection(LANGUAGE_ID_CSS, "@media all { ", " }", CSS_SELECTOR_SIGNATURES),
new MethodLanguageInjection(LANGUAGE_ID_XPATH, null, null, XPATH_SIGNATURES),
new MethodLanguageInjection(LANGUAGE_ID_JSON, null, null, JSON_SIGNATURES),
new MethodLanguageInjection(LANGUAGE_ID_DQL, null, null, DQL_SIGNATURES),
+ new MethodLanguageInjection(LANGUAGE_ID_TEXT, null, null, RESET_INJECTION_SIGNATURES),
};
public static final String LANGUAGE_ID_CSS = "CSS";
public static final String LANGUAGE_ID_XPATH = "XPath";
public static final String LANGUAGE_ID_JSON = "JSON";
public static final String LANGUAGE_ID_DQL = "DQL";
+ public static final String LANGUAGE_ID_TEXT = "TEXT";
private static final String DQL_VARIABLE_NAME = "dql";
@@ -97,6 +109,10 @@ public void getLanguagesToInject(@NotNull MultiHostRegistrar registrar, @NotNull
// JsonResponse::fromJsonString('...')
if (parent instanceof MethodReference) {
if (PhpElementsUtil.isMethodReferenceInstanceOf((MethodReference) parent, languageInjection.getSignatures())) {
+ // Only "overwrite" language injection to "TEXT" when XML-like characters in literal
+ if (LANGUAGE_ID_TEXT.equals(language.getID()) && !expr.getContents().contains("<")) {
+ return;
+ }
injectLanguage(registrar, expr, language, languageInjection);
return;
}
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index 81bf5d969..49f9f7ae4 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -239,7 +239,7 @@
-
+
\");", LANGUAGE_ID_DQL);
}
+ public void testTextLanguageInjections() {
+ String base = "write('foo');", LANGUAGE_ID_TEXT);
+
+ String base2 = "writeln('foo');", LANGUAGE_ID_TEXT);
+
+ assertInjectedLangAtCaret(PhpFileType.INSTANCE, "\\Symfony\\Component\\Console\\Formatter\\OutputFormatter::escape('foo');", LANGUAGE_ID_TEXT);
+ }
+
private void assertInjectedLangAtCaret(LanguageFileType fileType, String configureByText, String lang) {
myFixture.configureByText(fileType, configureByText);
injectionTestFixture.assertInjectedLangAtCaret(lang);