diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt index f648631ce07..55d43cfe353 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt @@ -372,7 +372,10 @@ class KotlinLanguageInjector( val injectAnnotation = annotated.annotations.findAnnotation(FqName(AnnotationUtil.LANGUAGE)) ?: return null val languageId = injectAnnotation.argumentValue("value")?.safeAs()?.value ?: return null - return InjectionInfo(languageId, null, null) + val prefix = injectAnnotation.argumentValue("prefix")?.safeAs()?.value + val suffix = injectAnnotation.argumentValue("suffix")?.safeAs()?.value + + return InjectionInfo(languageId, prefix, suffix) } private fun findInjection(element: PsiElement?, injections: List): InjectionInfo? { diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt.173 b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt.173 index 834c533e83d..6e8ff8a48f7 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt.173 +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/injection/KotlinLanguageInjector.kt.173 @@ -172,11 +172,11 @@ class KotlinLanguageInjector( private fun findInjectionInfo(place: KtElement, originalHost: Boolean = true): InjectionInfo? { return injectWithExplicitCodeInstruction(place) - ?: injectWithCall(place) + ?: injectWithCall(place) ?: injectReturnValue(place) - ?: injectInAnnotationCall(place) - ?: injectWithReceiver(place) - ?: injectWithVariableUsage(place, originalHost) + ?: injectInAnnotationCall(place) + ?: injectWithReceiver(place) + ?: injectWithVariableUsage(place, originalHost) } private fun injectReturnValue(place: KtElement): InjectionInfo? { @@ -368,7 +368,10 @@ class KotlinLanguageInjector( val injectAnnotation = annotated.annotations.findAnnotation(FqName(AnnotationUtil.LANGUAGE)) ?: return null val languageId = injectAnnotation.argumentValue("value")?.safeAs()?.value ?: return null - return InjectionInfo(languageId, null, null) + val prefix = injectAnnotation.argumentValue("prefix")?.safeAs()?.value + val suffix = injectAnnotation.argumentValue("suffix")?.safeAs()?.value + + return InjectionInfo(languageId, prefix, suffix) } private fun findInjection(element: PsiElement?, injections: List): InjectionInfo? { diff --git a/idea/tests/org/jetbrains/kotlin/psi/KotlinInjectionTest.kt b/idea/tests/org/jetbrains/kotlin/psi/KotlinInjectionTest.kt index 391bc11ea4d..35ae7f95ce9 100644 --- a/idea/tests/org/jetbrains/kotlin/psi/KotlinInjectionTest.kt +++ b/idea/tests/org/jetbrains/kotlin/psi/KotlinInjectionTest.kt @@ -425,6 +425,18 @@ class KotlinInjectionTest : AbstractInjectionTest() { shreds = listOf(ShredInfo(range(0, 9), hostRange=range(1, 4), prefix = "abc", suffix = "ghi")) ) + fun testSuffixPrefixWithCallWithAnnotation() = doInjectionPresentTest( + """ + fun highlight(@org.intellij.lang.annotations.Language("TEXT", prefix = "fun __f(it: dynamic) = ", suffix = ";") code: String) {} + + fun test() { + highlight("it > 0") + } + """, + languageId = PlainTextLanguage.INSTANCE.id, unInjectShouldBePresent = false, + shreds = listOf(ShredInfo(range(0, 30), hostRange = range(1, 7), prefix = "fun __f(it: dynamic) = ", suffix = ";")) + ) + fun testSuffixPrefixInComment() = doInjectionPresentTest( """ // language="TEXT" prefix="abc" suffix=ghi