diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt index ad9c2e071ef..d0f38f39295 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt @@ -57,12 +57,11 @@ abstract class KotlinAbstractUElement(private val givenParent: UElement?) : UEle parent = parent.parent } - if (parent is KtStringTemplateExpression && parent.entries.size == 1) { - parent = parent.parent - } - if (parent is KtStringTemplateEntryWithExpression) { + while (parent is KtStringTemplateEntryWithExpression || + parent is KtStringTemplateExpression && parent.entries.size == 1) { parent = parent.parent } + if (parent is KtWhenConditionWithExpression) { parent = parent.parent } diff --git a/plugins/uast-kotlin/testData/StringTemplate.kt b/plugins/uast-kotlin/testData/StringTemplate.kt index 7ad4e569b25..bd49f63527e 100644 --- a/plugins/uast-kotlin/testData/StringTemplate.kt +++ b/plugins/uast-kotlin/testData/StringTemplate.kt @@ -4,4 +4,12 @@ val baz = "dolor" val foobarbaz = "$foo $bar $baz" -val case4 = "a ${"literal"} z" \ No newline at end of file +val case4 = "a ${"literal"} z" + +fun simpleForTemplate(i: Int = 0) = "$i" + +fun foo() { + println("$baz") + val template1 = "${simpleForTemplate()}" + val template2 = ".${simpleForTemplate()}" +} diff --git a/plugins/uast-kotlin/testData/StringTemplate.log.txt b/plugins/uast-kotlin/testData/StringTemplate.log.txt index 96866df827a..58a614ecb0a 100644 --- a/plugins/uast-kotlin/testData/StringTemplate.log.txt +++ b/plugins/uast-kotlin/testData/StringTemplate.log.txt @@ -28,3 +28,26 @@ UFile (package = ) UAnnotationMethod (name = getBaz) UAnnotationMethod (name = getFoobarbaz) UAnnotationMethod (name = getCase4) + UAnnotationMethod (name = simpleForTemplate) + UParameter (name = i) + UAnnotation (fqName = null) + ULiteralExpression (value = 0) + USimpleNameReferenceExpression (identifier = i) + UAnnotationMethod (name = foo) + UBlockExpression + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) + UIdentifier (Identifier (println)) + USimpleNameReferenceExpression (identifier = println) + USimpleNameReferenceExpression (identifier = baz) + UDeclarationsExpression + ULocalVariable (name = template1) + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) + UIdentifier (Identifier (simpleForTemplate)) + USimpleNameReferenceExpression (identifier = simpleForTemplate) + UDeclarationsExpression + ULocalVariable (name = template2) + UPolyadicExpression (operator = +) + ULiteralExpression (value = ".") + UCallExpression (kind = UastCallKind(name='method_call'), argCount = 0)) + UIdentifier (Identifier (simpleForTemplate)) + USimpleNameReferenceExpression (identifier = simpleForTemplate) diff --git a/plugins/uast-kotlin/testData/StringTemplate.render.txt b/plugins/uast-kotlin/testData/StringTemplate.render.txt index edd8f2a1eaf..53352b5611c 100644 --- a/plugins/uast-kotlin/testData/StringTemplate.render.txt +++ b/plugins/uast-kotlin/testData/StringTemplate.render.txt @@ -9,4 +9,10 @@ public final class StringTemplateKt { public static final fun getBaz() : java.lang.String = UastEmptyExpression public static final fun getFoobarbaz() : java.lang.String = UastEmptyExpression public static final fun getCase4() : java.lang.String = UastEmptyExpression + public static final fun simpleForTemplate(i: int) : java.lang.String = i + public static final fun foo() : void { + println(baz) + var template1: java.lang.String = simpleForTemplate() + var template2: java.lang.String = "." + simpleForTemplate() + } }