void (@Nullable PyNamedParameter param, @NotNull PyFunction pyFunction) { if (!FileModificationService.getInstance().preparePsiElementForWrite(pyFunction)) return; if (!PyGenerateDocstringIntention.ensureNotPlainDocstringFormat(pyFunction)) return; final PyDocstringGenerator docstringGenerator = PyDocstringGenerator.forDocStringOwner(pyFunction); String type = PyNames.OBJECT; if (param != null) { final String paramName = StringUtil.notNullize(param.getName()); final PySignature signature = PySignatureCacheManager.getInstance(pyFunction.getProject()).findSignature(pyFunction); if (signature != null) { type = ObjectUtils.chooseNotNull(signature.getArgTypeQualifiedName(paramName), type); } docstringGenerator.withParamTypedByName(param, type); } else { final PySignature signature = PySignatureCacheManager.getInstance(pyFunction.getProject()).findSignature(pyFunction); if (signature != null) { type = ObjectUtils.chooseNotNull(signature.getReturnTypeQualifiedName(), type); } docstringGenerator.withReturnValue(type); } WriteAction.run(() -> { docstringGenerator.addFirstEmptyLine().buildAndInsert(); startTemplate(docstringGenerator); }); }