From a11cf253dfd4d6b4552eab15554e9a954450aa12 Mon Sep 17 00:00:00 2001 From: Nicolay Mitropolsky Date: Sat, 28 Oct 2017 20:28:42 +0300 Subject: [PATCH] UAST: correct processing of string literals in string literals (KT-20990) --- .../org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt | 4 ++-- plugins/uast-kotlin/testData/StringTemplate.kt | 4 +++- plugins/uast-kotlin/testData/StringTemplate.log.txt | 7 +++++++ plugins/uast-kotlin/testData/StringTemplate.render.txt | 2 ++ 4 files changed, 14 insertions(+), 3 deletions(-) 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 651b83fbe10..ad9c2e071ef 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinAbstractUElement.kt @@ -57,10 +57,10 @@ abstract class KotlinAbstractUElement(private val givenParent: UElement?) : UEle parent = parent.parent } - if (parent is KtStringTemplateEntryWithExpression) { + if (parent is KtStringTemplateExpression && parent.entries.size == 1) { parent = parent.parent } - if ((parent is KtStringTemplateExpression && parent.entries.size == 1)) { + if (parent is KtStringTemplateEntryWithExpression) { parent = parent.parent } if (parent is KtWhenConditionWithExpression) { diff --git a/plugins/uast-kotlin/testData/StringTemplate.kt b/plugins/uast-kotlin/testData/StringTemplate.kt index b7775ff5aa7..7ad4e569b25 100644 --- a/plugins/uast-kotlin/testData/StringTemplate.kt +++ b/plugins/uast-kotlin/testData/StringTemplate.kt @@ -2,4 +2,6 @@ val foo = "lorem" val bar = "ipsum" val baz = "dolor" -val foobarbaz = "$foo $bar $baz" \ No newline at end of file +val foobarbaz = "$foo $bar $baz" + +val case4 = "a ${"literal"} z" \ No newline at end of file diff --git a/plugins/uast-kotlin/testData/StringTemplate.log.txt b/plugins/uast-kotlin/testData/StringTemplate.log.txt index e38047dc442..96866df827a 100644 --- a/plugins/uast-kotlin/testData/StringTemplate.log.txt +++ b/plugins/uast-kotlin/testData/StringTemplate.log.txt @@ -17,7 +17,14 @@ UFile (package = ) USimpleNameReferenceExpression (identifier = bar) ULiteralExpression (value = " ") USimpleNameReferenceExpression (identifier = baz) + UField (name = case4) + UAnnotation (fqName = org.jetbrains.annotations.NotNull) + UPolyadicExpression (operator = +) + ULiteralExpression (value = "a ") + ULiteralExpression (value = "literal") + ULiteralExpression (value = " z") UAnnotationMethod (name = getFoo) UAnnotationMethod (name = getBar) UAnnotationMethod (name = getBaz) UAnnotationMethod (name = getFoobarbaz) + UAnnotationMethod (name = getCase4) diff --git a/plugins/uast-kotlin/testData/StringTemplate.render.txt b/plugins/uast-kotlin/testData/StringTemplate.render.txt index 2d56a3954b6..edd8f2a1eaf 100644 --- a/plugins/uast-kotlin/testData/StringTemplate.render.txt +++ b/plugins/uast-kotlin/testData/StringTemplate.render.txt @@ -3,8 +3,10 @@ public final class StringTemplateKt { private static final var bar: java.lang.String = "ipsum" private static final var baz: java.lang.String = "dolor" private static final var foobarbaz: java.lang.String = foo + " " + bar + " " + baz + private static final var case4: java.lang.String = "a " + "literal" + " z" public static final fun getFoo() : java.lang.String = UastEmptyExpression public static final fun getBar() : java.lang.String = UastEmptyExpression 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 }