Minor code improvements in ConvertToStringTemplateIntention
This commit is contained in:
@@ -38,9 +38,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
|||||||
public class ConvertToStringTemplateIntention : JetSelfTargetingOffsetIndependentIntention<JetBinaryExpression>(javaClass(), "Convert concatenation to template") {
|
public class ConvertToStringTemplateIntention : JetSelfTargetingOffsetIndependentIntention<JetBinaryExpression>(javaClass(), "Convert concatenation to template") {
|
||||||
override fun isApplicableTo(element: JetBinaryExpression): Boolean {
|
override fun isApplicableTo(element: JetBinaryExpression): Boolean {
|
||||||
if (element.getOperationToken() != JetTokens.PLUS) return false
|
if (element.getOperationToken() != JetTokens.PLUS) return false
|
||||||
|
if (!KotlinBuiltIns.isString(element.analyze().getType(element))) return false
|
||||||
val elementType = BindingContextUtils.getRecordedTypeInfo(element, element.analyze())?.type
|
|
||||||
if (!KotlinBuiltIns.isString(elementType)) return false
|
|
||||||
|
|
||||||
val left = element.getLeft() ?: return false
|
val left = element.getLeft() ?: return false
|
||||||
val right = element.getRight() ?: return false
|
val right = element.getRight() ?: return false
|
||||||
@@ -68,20 +66,21 @@ public class ConvertToStringTemplateIntention : JetSelfTargetingOffsetIndependen
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
val leftText = buildText(left, needsBraces)
|
val leftText = buildText(left, needsBraces)
|
||||||
return "\"" + leftText + right + "\""
|
return "\"$leftText$right\""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildText(expr: JetExpression?, needsBraces: Boolean): String {
|
private fun buildText(expr: JetExpression?, forceBraces: Boolean): String {
|
||||||
val expression = JetPsiUtil.deparenthesize(expr)
|
if (expr == null) return ""
|
||||||
val expressionText = expression?.getText() ?: ""
|
val expression = JetPsiUtil.safeDeparenthesize(expr)
|
||||||
|
val expressionText = expression.getText()
|
||||||
return when (expression) {
|
return when (expression) {
|
||||||
is JetConstantExpression -> {
|
is JetConstantExpression -> {
|
||||||
val context = expression.analyze()
|
val bindingContext = expression.analyze()
|
||||||
val constant = ConstantExpressionEvaluator.evaluate(expression, DelegatingBindingTrace(context, "Trace for evaluating constant"), null)
|
val constant = ConstantExpressionEvaluator.getConstant(expression, bindingContext)
|
||||||
if (constant is IntegerValueTypeConstant) {
|
if (constant is IntegerValueTypeConstant) {
|
||||||
val elementType = BindingContextUtils.getRecordedTypeInfo(expression, context)?.type!!
|
val type = bindingContext.getType(expression)!!
|
||||||
constant.getValue(elementType).toString()
|
constant.getValue(type).toString()
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
constant?.getValue().toString()
|
constant?.getValue().toString()
|
||||||
@@ -96,8 +95,8 @@ public class ConvertToStringTemplateIntention : JetSelfTargetingOffsetIndependen
|
|||||||
else {
|
else {
|
||||||
StringUtil.unquoteString(expressionText)
|
StringUtil.unquoteString(expressionText)
|
||||||
}
|
}
|
||||||
if (needsBraces && base.endsWith('$')) {
|
if (forceBraces && base.endsWith('$')) {
|
||||||
base.substring(0, base.length() - 1) + "\\$"
|
base.dropLast(1) + "\\$"
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
base
|
base
|
||||||
@@ -105,7 +104,7 @@ public class ConvertToStringTemplateIntention : JetSelfTargetingOffsetIndependen
|
|||||||
}
|
}
|
||||||
|
|
||||||
is JetSimpleNameExpression ->
|
is JetSimpleNameExpression ->
|
||||||
if (needsBraces) "\${" + expressionText + "}" else "\$" + expressionText
|
"$" + (if (forceBraces) "{$expressionText}" else expressionText)
|
||||||
|
|
||||||
null -> ""
|
null -> ""
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user