Fix returning traits in trait calls, move towards clone on return
[ldk-java] / src / main / java / org / ldk / structs / KeysInterface.java
index e60efc5a2cc710edd092e1a5dac3c9e69bb7e07c..cc934aef83befc9bbb7c865b9a4ef1e68af21a6e 100644 (file)
@@ -26,8 +26,10 @@ public class KeysInterface extends CommonBase {
                ChannelKeys get_channel_keys(boolean inbound, long channel_value_satoshis);
                byte[] get_secure_random_bytes();
        }
-       public KeysInterface(KeysInterfaceInterface arg) {
-               this(new bindings.LDKKeysInterface() {
+       private static class LDKKeysInterfaceHolder { KeysInterface held; }
+       public static KeysInterface new_impl(KeysInterfaceInterface arg) {
+               final LDKKeysInterfaceHolder impl_holder = new LDKKeysInterfaceHolder();
+               impl_holder.held = new KeysInterface(new bindings.LDKKeysInterface() {
                        @Override public byte[] get_node_secret() {
                                byte[] ret = arg.get_node_secret();
                                return ret;
@@ -42,8 +44,8 @@ public class KeysInterface extends CommonBase {
                        }
                        @Override public long get_channel_keys(boolean inbound, long channel_value_satoshis) {
                                ChannelKeys ret = arg.get_channel_keys(inbound, channel_value_satoshis);
-                               long result = ret.ptr;
-                               ret.ptr = 0;
+                               long result = ret == null ? 0 : ret.ptr;
+                               impl_holder.held.ptrs_to.add(ret);
                                return result;
                        }
                        @Override public byte[] get_secure_random_bytes() {
@@ -51,6 +53,7 @@ public class KeysInterface extends CommonBase {
                                return ret;
                        }
                });
+               return impl_holder.held;
        }
        public byte[] get_node_secret() {
                byte[] ret = bindings.KeysInterface_get_node_secret(this.ptr);