in src/org/jetbrains/r/inspections/classes/s4/DeprecatedSetClassArgsInspection.kt [74:115]
override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
val argList = descriptor.psiElement as RArgumentList
val reprArg = argList.children.first { it.textRangeInParent == descriptor.textRangeInElement } as RPsiElement
val repr =
if (reprArg is RNamedArgument) reprArg.assignedValue ?: return
else reprArg
val slots = mutableListOf<RExpression>()
val contains = mutableListOf<RExpression>()
when (repr) {
is RStringLiteralExpression -> contains.add(repr)
is RCallExpression -> {
for (arg in repr.argumentList.expressionList) {
if (arg is RNamedArgument) slots.add(arg)
else contains.add(arg)
}
}
else -> return
}
if (contains.isEmpty() && slots.isEmpty()) {
removeArgument(reprArg)
return
}
val newArgsText = argList.expressionList.joinToString(", ") { arg ->
if (arg != reprArg) arg.text
else buildString {
if (contains.isNotEmpty()) {
append("contains = ")
if (contains.size == 1) append(contains.single().text)
else append("c(").append(contains.joinToString(", ") { it.text }).append(")")
}
if (slots.isNotEmpty()) {
if (contains.isNotEmpty()) append(", ")
append("slots = c(").append(slots.joinToString(", ") { it.text }).append(")")
}
}
}
val newArgs = RElementFactory.createFuncallFromText(project, "tmp($newArgsText)").argumentList
CodeStyleManager.getInstance(project).reformat(argList.replace(newArgs))
}