From c21dff66aa8e14ce586f63cf74c79421aa7e0a23 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 15 Apr 2016 13:44:49 +0300 Subject: [PATCH] Spring Support: Allow injection of SpEL into string literals with escape sequences #KT-11904 Fixed --- .../src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt | 1 + .../jetbrains/kotlin/idea/spring/el/KotlinSpringELInjector.kt | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt index 3c33f1e725a..f578695e96d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt @@ -413,6 +413,7 @@ private val MODALITY_MODIFIERS = TokenSet.create( fun KtDeclaration.modalityModifier() = modifierFromTokenSet(MODALITY_MODIFIERS) fun KtStringTemplateExpression.isPlain() = entries.all { it is KtLiteralStringTemplateEntry } +fun KtStringTemplateExpression.isPlainWithEscapes() = entries.all { it is KtLiteralStringTemplateEntry || it is KtEscapeStringTemplateEntry } val KtDeclaration.containingClassOrObject: KtClassOrObject? get() = (parent as? KtClassBody)?.parent as? KtClassOrObject diff --git a/ultimate/src/org/jetbrains/kotlin/idea/spring/el/KotlinSpringELInjector.kt b/ultimate/src/org/jetbrains/kotlin/idea/spring/el/KotlinSpringELInjector.kt index 045ce263f04..4280bd9fa41 100644 --- a/ultimate/src/org/jetbrains/kotlin/idea/spring/el/KotlinSpringELInjector.kt +++ b/ultimate/src/org/jetbrains/kotlin/idea/spring/el/KotlinSpringELInjector.kt @@ -33,7 +33,7 @@ import org.jetbrains.kotlin.psi.KtAnnotationEntry import org.jetbrains.kotlin.psi.KtStringTemplateExpression import org.jetbrains.kotlin.psi.KtValueArgument import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType -import org.jetbrains.kotlin.psi.psiUtil.isPlain +import org.jetbrains.kotlin.psi.psiUtil.isPlainWithEscapes import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.utils.ifEmpty @@ -52,7 +52,7 @@ class KotlinSpringELInjector : MultiHostInjector { override fun getLanguagesToInject(registrar: MultiHostRegistrar, host: PsiElement) { if (host is KtStringTemplateExpression) { - if (!host.isPlain()) return + if (!host.isPlainWithEscapes()) return val argument = host.parent as? KtValueArgument ?: return val entry = argument.getStrictParentOfType() ?: return