Introduce Variable: Support extraction of string template fragments
#KT-2089 Fixed
This commit is contained in:
@@ -55,15 +55,25 @@ public class KtPsiFactory(private val project: Project) {
|
||||
return (createExpression("a?.b") as KtSafeQualifiedExpression).getOperationTokenNode()
|
||||
}
|
||||
|
||||
public fun createExpression(text: String): KtExpression {
|
||||
private fun doCreateExpression(text: String): KtExpression {
|
||||
//TODO: '\n' below if important - some strange code indenting problems appear without it
|
||||
val expression = createProperty("val x =\n$text").getInitializer() ?: error("Failed to create expression from text: '$text'")
|
||||
return expression
|
||||
}
|
||||
|
||||
public fun createExpression(text: String): KtExpression {
|
||||
val expression = doCreateExpression(text)
|
||||
assert(expression.getText() == text) {
|
||||
"Failed to create expression from text: '$text', resulting expression's text was: '${expression.getText()}'"
|
||||
}
|
||||
return expression
|
||||
}
|
||||
|
||||
public fun createExpressionIfPossible(text: String): KtExpression? {
|
||||
val expression = doCreateExpression(text)
|
||||
return if (expression.getText() == text) expression else null
|
||||
}
|
||||
|
||||
public fun createClassLiteral(className: String): KtClassLiteralExpression =
|
||||
createExpression("$className::class") as KtClassLiteralExpression
|
||||
|
||||
@@ -291,6 +301,8 @@ public class KtPsiFactory(private val project: Project) {
|
||||
return stringTemplateExpression.getEntries()[0] as KtStringTemplateEntryWithExpression
|
||||
}
|
||||
|
||||
public fun createStringTemplate(content: String) = createExpression("\"$content\"") as KtStringTemplateExpression
|
||||
|
||||
public fun createPackageDirective(fqName: FqName): KtPackageDirective {
|
||||
return createFile("package ${fqName.asString()}").getPackageDirective()!!
|
||||
}
|
||||
|
||||
@@ -138,6 +138,8 @@ public fun PsiElement.getNextSiblingIgnoringWhitespaceAndComments(): PsiElement?
|
||||
return siblings(withItself = false).filter { it !is PsiWhiteSpace && it !is PsiComment }.firstOrNull()
|
||||
}
|
||||
|
||||
inline public fun <reified T : PsiElement> T.nextSiblingOfSameType() = PsiTreeUtil.getNextSiblingOfType(this, T::class.java)
|
||||
|
||||
public fun PsiElement?.isAncestor(element: PsiElement, strict: Boolean = false): Boolean {
|
||||
return PsiTreeUtil.isAncestor(this, element, strict)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user