in scala/scala-impl/src/org/jetbrains/plugins/scala/lang/refactoring/util/ScalaRefactoringUtil.scala [635:785]
def getShortText(expr: ScalaPsiElement): String = {
val builder = new mutable.StringBuilder
expr match {
case ass: ScAssignment =>
builder.append(getShortText(ass.leftExpression))
builder.append(" = ")
ass.rightExpression match {
case Some(r) => builder.append(getShortText(r))
case _ =>
}
case _: ScBlock =>
builder.append("{...}")
case _: ScDo =>
builder.append("do {...} while (...)")
case f: ScFor =>
builder.append("for (...) ")
val yieldOrDo = f.yieldOrDoKeyword
val yieldOrDoStr = yieldOrDo.map(_.elementType).map(_.getDebugName + " ")
yieldOrDoStr.foreach(builder.append)
builder.append("{...}")
case f: ScFunctionExpr =>
val arrow = ScalaPsiUtil.functionArrow(f.getProject)
builder.append(f.params.getText).append(s" $arrow {...}")
case g: ScGenericCall =>
builder.append(getShortText(g.referencedExpr))
builder.append("[...]")
case i: ScIf =>
builder.append("if (...) {...}")
if (i.elseExpression.isDefined) builder.append(" else {...}")
//
case ScInfixElement(left, op, rightOption) =>
rightOption match {
case Some(right) =>
builder.append(getShortText(left))
builder.append(" ")
builder.append(getShortText(op))
builder.append(" ")
builder.append(getShortText(right))
case _ =>
}
case i: ScInterpolationPattern =>
builder.append(getShortText(i.ref))
builder.append("\"...\"")
case c: ScConstructorPattern =>
builder.append(getShortText(c.ref))
builder.append(c.args.patterns.map(getShortText).mkString("(", ", ", ")"))
case n: ScNamingPattern =>
builder.append(n.name)
builder.append(" @ ")
builder.append(getShortText(n.named))
case f: ScFunctionalTypeElement =>
builder.append(getShortText(f.paramTypeElement))
builder.append(" => ")
builder.append(f.returnTypeElement.map(getShortText(_)).getOrElse("..."))
case l: ScLiteral => builder.append(l.getText)
case m: ScMatch =>
m.expression match {
case Some(expression) => builder.append(getShortText(expression))
case _ => builder.append("...")
}
builder.append(" match {...}")
case m: ScMethodCall =>
builder.append(getShortText(m.getInvokedExpr))
if (m.argumentExpressions.isEmpty) builder.append("()")
else builder.append("(...)")
case n: ScNewTemplateDefinition =>
builder.append("new ")
val types = n.extendsBlock.superTypes
for (tp <- types) {
builder.append(tp.codeText(expr, Context(expr)))
if (tp != types.last) builder.append(" with ")
}
n.extendsBlock.templateBody match {
case Some(_) => builder.append(" {...}")
case _ =>
}
case p : ScParenthesizedElement =>
builder.append("(")
p.innerElement match {
case Some(sub) => builder.append(getShortText(sub))
case _ =>
}
builder.append(")")
case p: ScPostfixExpr =>
builder.append(getShortText(p.operand))
builder.append(" ")
builder.append(getShortText(p.operation))
case p: ScPrefixExpr =>
builder.append(getShortText(p.operation))
builder.append(getShortText(p.operand))
case r: ScReferenceExpression =>
r.qualifier match {
case Some(q) => builder.append(getShortText(q)).append(".")
case _ =>
}
builder.append(r.refName)
case r: ScReturn =>
builder.append("return ")
r.expr.map(getShortText)
.foreach(builder.append)
case s: ScSuperReference => builder.append(s.getText)
case t: ScThisReference => builder.append(t.getText)
case t: ScThrow =>
builder.append("throw ")
t.expression match {
case Some(expression) => builder.append(getShortText(expression))
case _ => builder.append("...")
}
case t: ScTry =>
builder.append("try {...}")
if (t.catchBlock.isDefined) builder.append(" catch {...}")
if (t.finallyBlock.isDefined) builder.append(" finally {...}")
case t: ScTuple =>
builder.append("(")
val exprs = t.exprs
for (expr <- exprs) {
builder.append(getShortText(expr))
if (expr != exprs.last) builder.append(", ")
}
builder.append(")")
case ScNamedTuple(components) =>
builder.append("(")
for (comp <- components) {
comp.name.foreach(builder.append)
builder.append(" = ")
comp.expr.foreach(expr => builder.append(getShortText(expr)))
if (comp != components.last) builder.append(", ")
}
builder.append(")")
case t: ScTypedExpression =>
builder.append(getShortText(t.expr))
builder.append(" : ")
builder.append(t.typeElement match {
case Some(te) => te.getText
case _ => "..."
})
case u: ScUnderscoreSection =>
if (u.bindingExpr.isEmpty) builder.append("_")
else {
builder.append(getShortText(u.bindingExpr.get))
builder.append(" _")
}
case _: ScUnitExpr => builder.append("()")
case _: ScWhile => builder.append("while (...) {...}")
case x: ScXmlExpr => builder.append(x.getText)
case _ => builder.append(expr.getText)
}
builder.toString()
}