private static JetParameterList replaceParameterListAndKeepDelimiters(
      JetParameterList parameterList, JetParameterList newParameterList) {
    List<JetParameter> oldParameters = parameterList.getParameters();
    List<JetParameter> newParameters = newParameterList.getParameters();
    int oldCount = oldParameters.size();
    int newCount = newParameters.size();

    int commonCount = Math.min(oldCount, newCount);
    for (int i = 0; i < commonCount; i++) {
      oldParameters.set(i, (JetParameter) oldParameters.get(i).replace(newParameters.get(i)));
    }

    if (commonCount == 0) return (JetParameterList) parameterList.replace(newParameterList);

    if (oldCount > commonCount) {
      parameterList.deleteChildRange(
          oldParameters.get(commonCount - 1).getNextSibling(), KotlinPackage.last(oldParameters));
    } else if (newCount > commonCount) {
      parameterList.addRangeAfter(
          newParameters.get(commonCount - 1).getNextSibling(),
          newParameterList.getLastChild().getPrevSibling(),
          PsiTreeUtil.skipSiblingsBackward(
              parameterList.getLastChild(), PsiWhiteSpace.class, PsiComment.class));
    }

    return parameterList;
  }