PyNamedParameter (Project project, Editor editor, @NotNull PyNamedParameter parameter, boolean createTemplate) { final PyExpression defaultParamValue = parameter.getDefaultValue(); final String paramName = ParamHelper.getNameInSignature(parameter); final PyElementGenerator elementGenerator = PyElementGenerator.getInstance(project); final String defaultParamText = defaultParamValue == null ? null : defaultParamValue.getText(); String paramType = parameterType(parameter); final PyNamedParameter namedParameter = elementGenerator.createParameter(paramName, defaultParamText, paramType, LanguageLevel.forElement(parameter)); assert namedParameter != null; parameter = (PyNamedParameter)parameter.replace(namedParameter); parameter = CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(parameter); editor.getCaretModel().moveToOffset(parameter.getTextOffset()); final PyAnnotation annotation = parameter.getAnnotation(); if (annotation != null && createTemplate) { final PyExpression annotationValue = annotation.getValue(); final TemplateBuilder builder = TemplateBuilderFactory.getInstance().createTemplateBuilder(parameter); assert annotationValue != null : "Generated parameter must have annotation"; final int replacementStart = annotation.getStartOffsetInParent() + annotationValue.getStartOffsetInParent(); builder.replaceRange(TextRange.from(replacementStart, annotationValue.getTextLength()), paramType); builder.run(editor, true); } return parameter; }