Remove braces from block string template entry: Simplify implementation

This commit is contained in:
Alexey Sedunov
2014-12-23 13:57:34 +03:00
parent 82579f489b
commit 7d31c562b3
2 changed files with 10 additions and 12 deletions
@@ -257,6 +257,11 @@ public class JetPsiFactory(private val project: Project) {
return stringTemplateExpression.getEntries()[0] as JetStringTemplateEntryWithExpression return stringTemplateExpression.getEntries()[0] as JetStringTemplateEntryWithExpression
} }
public fun createSimpleNameStringTemplateEntry(name: String): JetStringTemplateEntryWithExpression {
val stringTemplateExpression = createExpression("\"\$$name\"") as JetStringTemplateExpression
return stringTemplateExpression.getEntries()[0] as JetStringTemplateEntryWithExpression
}
public fun createImportDirective(path: String): JetImportDirective { public fun createImportDirective(path: String): JetImportDirective {
return createImportDirective(ImportPath(path)) return createImportDirective(ImportPath(path))
} }
@@ -32,20 +32,13 @@ public class RemoveCurlyBracesFromTemplateIntention : JetSelfTargetingIntention<
override fun isApplicableTo(element: JetBlockStringTemplateEntry): Boolean { override fun isApplicableTo(element: JetBlockStringTemplateEntry): Boolean {
val nextSiblingText = element.getNextSibling()?.getText() val nextSiblingText = element.getNextSibling()?.getText()
if (nextSiblingText != null && pattern.matcher(nextSiblingText).matches()) return false if (nextSiblingText != null && pattern.matcher(nextSiblingText).matches()) return false
return element.getExpression()?.getOriginalElement() is JetSimpleNameExpression return element.getExpression() is JetSimpleNameExpression
} }
override fun applyTo(element: JetBlockStringTemplateEntry, editor: Editor) { override fun applyTo(element: JetBlockStringTemplateEntry, editor: Editor) {
val parent = element.getParent() if (!isApplicableTo(element)) return
if (parent == null) return
val sb = StringBuilder() val name = (element.getExpression() as JetSimpleNameExpression).getReferencedName()
for (ch in parent.getChildren()) { element.replace(JetPsiFactory(element).createSimpleNameStringTemplateEntry(name))
val newText = if (ch == element) "\$${element.getExpression()?.getText()}" else "${ch.getText()}"
sb.append(newText)
}
val tripleQuotes = parent.getFirstChild()?.getText()?.startsWith("\"\"\"")
if (tripleQuotes == null) return
val newExpression = if (tripleQuotes) "\"\"\"${sb.toString()}\"\"\"" else "\"${sb.toString()}\""
parent.replace(JetPsiFactory(element).createExpression(newExpression))
} }
} }