Inject with suffix and prefix arguments in annotations (KT-26584)
#KT-26584 Fixed
This commit is contained in:
@@ -372,7 +372,10 @@ class KotlinLanguageInjector(
|
||||
val injectAnnotation = annotated.annotations.findAnnotation(FqName(AnnotationUtil.LANGUAGE)) ?: return null
|
||||
|
||||
val languageId = injectAnnotation.argumentValue("value")?.safeAs<StringValue>()?.value ?: return null
|
||||
return InjectionInfo(languageId, null, null)
|
||||
val prefix = injectAnnotation.argumentValue("prefix")?.safeAs<StringValue>()?.value
|
||||
val suffix = injectAnnotation.argumentValue("suffix")?.safeAs<StringValue>()?.value
|
||||
|
||||
return InjectionInfo(languageId, prefix, suffix)
|
||||
}
|
||||
|
||||
private fun findInjection(element: PsiElement?, injections: List<BaseInjection>): InjectionInfo? {
|
||||
|
||||
@@ -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<StringValue>()?.value ?: return null
|
||||
return InjectionInfo(languageId, null, null)
|
||||
val prefix = injectAnnotation.argumentValue("prefix")?.safeAs<StringValue>()?.value
|
||||
val suffix = injectAnnotation.argumentValue("suffix")?.safeAs<StringValue>()?.value
|
||||
|
||||
return InjectionInfo(languageId, prefix, suffix)
|
||||
}
|
||||
|
||||
private fun findInjection(element: PsiElement?, injections: List<BaseInjection>): InjectionInfo? {
|
||||
|
||||
@@ -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("<caret>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
|
||||
|
||||
Reference in New Issue
Block a user