Skip to content

Commit c42b84f

Browse files
authored
add support for Kotlin multi-dollar interpolation string (#7090)
1 parent 03048dc commit c42b84f

2 files changed

Lines changed: 22 additions & 2 deletions

File tree

rewrite-kotlin/src/main/java/org/openrewrite/kotlin/internal/KotlinTreeParserVisitor.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3132,15 +3132,24 @@ public J visitStringTemplateExpression(KtStringTemplateExpression expression, Ex
31323132
}
31333133

31343134
private static String getString(KtStringTemplateExpression expression, StringBuilder valueSb) {
3135-
PsiElement openQuote = expression.getFirstChild();
3135+
PsiElement openQuote;
3136+
String prefix;
3137+
if (expression.getInterpolationPrefix() == null) {
3138+
openQuote = expression.getFirstChild();
3139+
prefix = "";
3140+
} else {
3141+
openQuote = expression.getFirstChild().getNextSibling();
3142+
prefix = expression.getInterpolationPrefix().getInterpolationPrefix();
3143+
}
3144+
31363145
PsiElement closingQuota = expression.getLastChild();
31373146
if (openQuote == null || closingQuota == null ||
31383147
openQuote.getNode().getElementType() != KtTokens.OPEN_QUOTE ||
31393148
closingQuota.getNode().getElementType() != KtTokens.CLOSING_QUOTE) {
31403149
throw new UnsupportedOperationException("This should never happen");
31413150
}
31423151

3143-
return openQuote.getText() + valueSb + closingQuota.getText();
3152+
return prefix + openQuote.getText() + valueSb + closingQuota.getText();
31443153
}
31453154

31463155
@Override

rewrite-kotlin/src/test/java/org/openrewrite/kotlin/KotlinParserTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,15 @@ class MyClass
6363
);
6464
}
6565

66+
@Test
67+
void multiDollarStringInterpolation() {
68+
rewriteRun(
69+
kotlin(
70+
"""
71+
val x = $$"$something"
72+
"""
73+
)
74+
);
75+
}
76+
6677
}

0 commit comments

Comments
 (0)