From abafb3b6dc355941a3ec4ac583253bc018e6c940 Mon Sep 17 00:00:00 2001 From: Nicolay Mitropolsky Date: Sun, 8 Sep 2019 17:50:47 +0300 Subject: [PATCH] [icp-http-client] `mapHostRangesToPathFirTree` fix for Kotlin's interpolated strings GitOrigin-RevId: ed1fc0fd52b60ee1a35ffdeeb846737fe14359bd --- .../uast/expressions/UStringConcatenationsFacade.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/uast/uast-common/src/org/jetbrains/uast/expressions/UStringConcatenationsFacade.kt b/uast/uast-common/src/org/jetbrains/uast/expressions/UStringConcatenationsFacade.kt index d89fd48ba579..5892e88a9d26 100644 --- a/uast/uast-common/src/org/jetbrains/uast/expressions/UStringConcatenationsFacade.kt +++ b/uast/uast-common/src/org/jetbrains/uast/expressions/UStringConcatenationsFacade.kt @@ -115,6 +115,17 @@ sealed class StringEntry { class Known(val value: String, override val uExpression: UExpression, override val range: TextRange) : StringEntry() class Unknown(override val uExpression: UExpression, override val range: TextRange) : StringEntry() + + val rangeAlignedToHost: TextRange? + get() { + val entry = this + val sourcePsi = entry.uExpression.sourcePsi ?: return null + if (sourcePsi is PsiLanguageInjectionHost) return entry.range + if (sourcePsi.parent is PsiLanguageInjectionHost) { // Kotlin interpolated string, TODO: encapsulate this logic to range retrieval + return entry.range.shiftRight(sourcePsi.startOffsetInParent - ElementManipulators.getValueTextRange(sourcePsi.parent).startOffset) + } + return null + } } @ApiStatus.Experimental