19
19
20
20
import chip .devicecontroller .model .InvokeResponseData ;
21
21
import chip .devicecontroller .model .NoInvokeResponseData ;
22
- import java .lang .ref .Cleaner ;
23
22
import java .util .Optional ;
24
23
import javax .annotation .Nullable ;
25
24
26
25
/** JNI wrapper callback class for {@link InvokeCallback}. */
27
- public final class BatchInvokeCallbackJni {
28
- private final BatchInvokeCallbackJni wrappedBatchInvokeCallback ;
26
+ public final class ExtendableInvokeCallbackJni {
27
+ private final ExtendableInvokeCallback wrappedExtendableInvokeCallback ;
29
28
private long callbackHandle ;
30
29
31
- private final Cleaner .Cleanable cleanable ;
32
-
33
- public BatchInvokeCallbackJni (BatchInvokeCallback wrappedBatchInvokeCallback ) {
34
- this .wrappedBatchInvokeCallback = wrappedBatchInvokeCallback ;
30
+ public ExtendableInvokeCallbackJni (ExtendableInvokeCallback wrappedExtendableInvokeCallback ) {
31
+ this .wrappedExtendableInvokeCallback = wrappedExtendableInvokeCallback ;
35
32
this .callbackHandle = newCallback ();
36
-
37
- this .cleanable =
38
- Cleaner .create ()
39
- .register (
40
- this ,
41
- () -> {
42
- if (chipClusterPtr != 0 ) {
43
- deleteCluster (chipClusterPtr );
44
- chipClusterPtr = 0 ;
45
- }
46
- });
47
33
}
48
34
49
35
long getCallbackHandle () {
@@ -55,7 +41,7 @@ long getCallbackHandle() {
55
41
private native void deleteCallback (long callbackHandle );
56
42
57
43
private void onError (Exception e ) {
58
- wrappedBatchInvokeCallback .onError (e );
44
+ wrappedExtendableInvokeCallback .onError (e );
59
45
}
60
46
61
47
private void onResponse (
@@ -88,10 +74,21 @@ private void onResponse(
88
74
}
89
75
90
76
private void onNoResponse (int commandRef ) {
91
- wrappedBatchInvokeCallback .onNoResponse (NoInvokeResponseData .newInstance (commandRef ));
77
+ wrappedExtendableInvokeCallback .onNoResponse (NoInvokeResponseData .newInstance (commandRef ));
92
78
}
93
79
94
80
private void onDone () {
95
- wrappedBatchInvokeCallback .onDone ();
81
+ wrappedExtendableInvokeCallback .onDone ();
82
+ }
83
+
84
+ // TODO(#8578): Replace finalizer with PhantomReference.
85
+ @ SuppressWarnings ("deprecation" )
86
+ protected void finalize () throws Throwable {
87
+ super .finalize ();
88
+
89
+ if (callbackHandle != 0 ) {
90
+ deleteCallback (callbackHandle );
91
+ callbackHandle = 0 ;
92
+ }
96
93
}
97
94
}
0 commit comments