override fun applyFix()

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))
      }