DeprecatedSymbolUsageFix: fixed for string template

This commit is contained in:
Valentin Kipyatkov
2015-05-29 19:59:13 +03:00
parent a5cb1e8c2b
commit e60c3f5ee7
5 changed files with 40 additions and 21 deletions
@@ -37,9 +37,24 @@ public abstract class JetExpressionImpl(node: ASTNode) : JetElementImpl(node), J
companion object {
fun replaceExpression(expression: JetExpression, newElement: PsiElement, rawReplaceHandler: (PsiElement) -> PsiElement): PsiElement {
val parent = expression.getParent()
if (parent is JetExpression && newElement is JetExpression && JetPsiUtil.areParenthesesNecessary(newElement, expression, parent)) {
return rawReplaceHandler(JetPsiFactory(expression).createExpressionByPattern("($0)", newElement))
if (newElement is JetExpression) {
when (parent) {
is JetExpression -> {
if (JetPsiUtil.areParenthesesNecessary(newElement, expression, parent)) {
return rawReplaceHandler(JetPsiFactory(expression).createExpressionByPattern("($0)", newElement))
}
}
is JetSimpleNameStringTemplateEntry -> {
if (newElement !is JetSimpleNameExpression) {
val newEntry = parent.replace(JetPsiFactory(expression).createBlockStringTemplateEntry(newElement)) as JetBlockStringTemplateEntry
return newEntry.getExpression()!!
}
}
}
}
return rawReplaceHandler(newElement)
}
}
@@ -168,7 +168,7 @@ public class KotlinInlineValHandler extends InlineActionHandler {
continue;
}
inlinedExpressions.add(replaceExpression(referenceExpression, initializer));
inlinedExpressions.add((JetExpression) referenceExpression.replace(initializer));
}
for (PsiElement assignment : assignments) {
@@ -393,22 +393,4 @@ public class KotlinInlineValHandler extends InlineActionHandler {
}
return false;
}
@NotNull
private static JetExpression replaceExpression(
@NotNull PsiElement referenceElement,
@NotNull JetExpression newExpression
) {
PsiElement parent = referenceElement.getParent();
if (parent instanceof JetSimpleNameStringTemplateEntry &&
!(newExpression instanceof JetSimpleNameExpression)) {
JetBlockStringTemplateEntry templateEntry =
(JetBlockStringTemplateEntry) parent.replace(
JetPsiFactory((JetElement) parent).createBlockStringTemplateEntry(newExpression));
JetExpression expression = templateEntry.getExpression();
assert expression != null;
return expression;
}
return (JetExpression) referenceElement.replace(newExpression.copy());
}
}
@@ -0,0 +1,8 @@
// "Replace with '"p = $p"'" "true"
@deprecated("", ReplaceWith("\"p = \$p\""))
fun oldFun(p: Int) = "p = $p"
fun foo(p: Int) {
val s = <caret>oldFun(p + 1)
}
@@ -0,0 +1,8 @@
// "Replace with '"p = $p"'" "true"
@deprecated("", ReplaceWith("\"p = \$p\""))
fun oldFun(p: Int) = "p = $p"
fun foo(p: Int) {
val s = <caret>"p = ${p + 1}"
}
@@ -3046,6 +3046,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
doTest(fileName);
}
@TestMetadata("stringTemplate.kt")
public void testStringTemplate() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/deprecatedSymbolUsage/stringTemplate.kt");
doTest(fileName);
}
@TestMetadata("toOuterClassMethod.kt")
public void testToOuterClassMethod() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/deprecatedSymbolUsage/toOuterClassMethod.kt");