+ out_java_interface = ""
+ java_methods = []
+ for fn_line in field_function_lines:
+ java_method_descriptor = ""
+ if fn_line.fn_name != "free" and fn_line.fn_name != "cloned":
+ out_java_interface += "\t/**" + fn_line.docs.replace("\n", "\n\t * ") + "\n\t */\n"
+ out_java_interface += "\t" + fn_line.ret_ty_info.java_hu_ty + " " + fn_line.fn_name + "("
+
+ for idx, arg_conv_info in enumerate(fn_line.args_ty):
+ if idx >= 1:
+ out_java_interface += ", "
+ out_java_interface += f"{arg_conv_info.java_hu_ty} {safe_arg_name(arg_conv_info.arg_name)}"
+ java_method_descriptor += arg_conv_info.java_fn_ty_arg
+ out_java_interface += f");\n"
+ java_method_descriptor += ")" + fn_line.ret_ty_info.java_fn_ty_arg
+ java_methods.append((fn_line.fn_name, java_method_descriptor))
+
+ formatted_trait_docs = trait_doc_comment.replace("\n", "\n * ")
+ out_typescript_human = f"""
+{self.hu_struct_file_prefix}
+
+/** An implementation of {struct_name.replace("LDK","")} */
+public interface {struct_name.replace("LDK", "")}Interface {{
+{out_java_interface}}}
+
+/**
+ * {formatted_trait_docs}
+ */
+public class {struct_name.replace("LDK","")} : CommonBase {{
+ internal bindings.{struct_name} bindings_instance;
+ internal long instance_idx;
+
+ internal {struct_name.replace("LDK","")}(object _dummy, long ptr) : base(ptr) {{ bindings_instance = null; }}
+ ~{struct_name.replace("LDK","")}() {{
+ if (ptr != 0) {{ bindings.{struct_name.replace("LDK","")}_free(ptr); }}
+ }}
+
+{java_trait_wrapper}
+
+ /** Creates a new instance of {struct_name.replace("LDK","")} from a given implementation */
+ public static {struct_name.replace("LDK", "")} new_impl({struct_name.replace("LDK", "")}Interface arg{impl_constructor_arguments}) {{
+ {struct_name}Holder impl_holder = new {struct_name}Holder();
+ {struct_name}Impl impl = new {struct_name}Impl(arg, impl_holder);
+{super_constructor_statements} long[] ptr_idx = bindings.{struct_name}_new(impl{bindings_instantiator});
+
+ impl_holder.held = new {struct_name.replace("LDK", "")}(null, ptr_idx[0]);
+ impl_holder.held.instance_idx = ptr_idx[1];
+ impl_holder.held.bindings_instance = impl;
+{pointer_to_adder} return impl_holder.held;
+ }}
+
+"""
+
+ out_typescript_bindings += "\tpublic interface " + struct_name + " {\n"
+ java_meths = []
+ for fn_line in field_function_lines:
+ if fn_line.fn_name != "free" and fn_line.fn_name != "cloned":
+ out_typescript_bindings += f"\t\t{fn_line.ret_ty_info.java_ty} {fn_line.fn_name}("
+
+ for idx, arg_conv_info in enumerate(fn_line.args_ty):
+ if idx >= 1:
+ out_typescript_bindings = out_typescript_bindings + ", "
+ out_typescript_bindings += f"{arg_conv_info.java_ty} {safe_arg_name(arg_conv_info.arg_name)}"