From 7a82a6304ae8a893f4df9a7fab3601ccbc1ec52d Mon Sep 17 00:00:00 2001 From: Andrey Sokolov Date: Wed, 10 Jul 2019 13:48:07 +0300 Subject: [PATCH] Fixed injection range for heredoc/nowdoc literals in automatic injectors --- .../lang/ParameterLanguageInjector.java | 5 +---- .../tests/lang/ParameterLanguageInjectorTest.java | 13 ++++++++++++- 2 files changed, 13 insertions(+), 5 deletions(-) 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 11fe6efdc..697ff74bd 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/lang/ParameterLanguageInjector.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/lang/ParameterLanguageInjector.java @@ -118,11 +118,8 @@ else if (parent instanceof AssignmentExpression) { } private void injectLanguage(@NotNull MultiHostRegistrar registrar, @NotNull StringLiteralExpressionImpl element, Language language, MethodLanguageInjection languageInjection) { - final int length = ((StringLiteralExpression) element).getContents().length(); - final TextRange range = TextRange.create(1, length + 1); - registrar.startInjecting(language) - .addPlace(languageInjection.getPrefix(), languageInjection.getSuffix(), element, range) + .addPlace(languageInjection.getPrefix(), languageInjection.getSuffix(), element, element.getValueRange()) .doneInjecting(); } diff --git a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/lang/ParameterLanguageInjectorTest.java b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/lang/ParameterLanguageInjectorTest.java index 6023fcbe2..dcc17437e 100644 --- a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/lang/ParameterLanguageInjectorTest.java +++ b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/lang/ParameterLanguageInjectorTest.java @@ -1,9 +1,11 @@ package fr.adrienbrault.idea.symfony2plugin.tests.lang; import com.intellij.openapi.fileTypes.LanguageFileType; +import com.intellij.psi.PsiElement; import com.intellij.testFramework.fixtures.InjectionTestFixture; import com.jetbrains.php.lang.PhpFileType; import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase; +import junit.framework.TestCase; import static fr.adrienbrault.idea.symfony2plugin.lang.ParameterLanguageInjector.*; @@ -56,7 +58,9 @@ public void testDqlLanguageInjections() { String base = "createQuery('SELECT b FROM \\Foo\\Bar b');", LANGUAGE_ID_DQL); assertInjectedLangAtCaret(PhpFileType.INSTANCE, base + "$em->createQuery('');", LANGUAGE_ID_DQL); - + assertInjectedLangAtCaret(PhpFileType.INSTANCE, base + "$em->createQuery(<<createQuery(<<T\nAAA\n);", "SELECT"); + assertInjectedFragmentText(PhpFileType.INSTANCE, base + "$em->createQuery(<<<'AAA'\nSELECT a\nAAA\n);", "SELECT a"); base = "setDQL('SELECT b FROM \\Foo\\Bar b');", LANGUAGE_ID_DQL); assertInjectedLangAtCaret(PhpFileType.INSTANCE, base + "$q->setDQL('');", LANGUAGE_ID_DQL); @@ -69,4 +73,11 @@ private void assertInjectedLangAtCaret(LanguageFileType fileType, String configu myFixture.configureByText(fileType, configureByText); injectionTestFixture.assertInjectedLangAtCaret(lang); } + + private void assertInjectedFragmentText(LanguageFileType fileType, String configureByText, String text) { + myFixture.configureByText(fileType, configureByText); + PsiElement injectedElement = injectionTestFixture.getInjectedElement(); + assertNotNull(injectedElement); + TestCase.assertEquals(text, injectedElement.getContainingFile().getText()); + } } \ No newline at end of file