@@ -233,15 +233,29 @@ static void error(int code, int hr) {
233
233
SWT .error (code , null , String .format (" [0x%08x]" , hr ));
234
234
}
235
235
236
- static IUnknown newCallback (ICoreWebView2SwtCallback handler ) {
237
- long punk = COM .CreateSwtWebView2Callback ((arg0 , arg1 ) -> {
236
+ // This class should not be replaced by a lambda and not be renamed to ensure compatibility
237
+ // with native image generation when using GraalVM
238
+ // See https://github.com/eclipse-platform/eclipse.platform.swt/pull/2216
239
+ static class HandleCoreWebView2SwtCallback implements ICoreWebView2SwtCallback {
240
+ private final ICoreWebView2SwtCallback handler ;
241
+
242
+ public HandleCoreWebView2SwtCallback (ICoreWebView2SwtCallback handler ) {
243
+ this .handler = handler ;
244
+ }
245
+
246
+ @ Override
247
+ public int Invoke (long arg0 , long arg1 ) {
238
248
inCallback ++;
239
249
try {
240
250
return handler .Invoke (arg0 , arg1 );
241
251
} finally {
242
252
inCallback --;
243
253
}
244
- });
254
+ }
255
+ }
256
+
257
+ static IUnknown newCallback (ICoreWebView2SwtCallback handler ) {
258
+ long punk = COM .CreateSwtWebView2Callback (new HandleCoreWebView2SwtCallback (handler ));
245
259
if (punk == 0 ) error (SWT .ERROR_NO_HANDLES , COM .E_OUTOFMEMORY );
246
260
return new IUnknown (punk );
247
261
}
@@ -789,7 +803,7 @@ void setupBrowser(int hr, long pv) {
789
803
handler .Release ();
790
804
}
791
805
792
- IUnknown hostDisp = newHostObject (this :: handleCallJava );
806
+ IUnknown hostDisp = newHostObject (new HandleCoreWebView2SwtHost ( this . functions ) );
793
807
long [] hostObj = { COM .VT_DISPATCH , hostDisp .getAddress (), 0 }; // VARIANT
794
808
webView .AddHostObjectToScript ("swt\0 " .toCharArray (), hostObj );
795
809
hostDisp .Release ();
@@ -1020,24 +1034,36 @@ int handleDocumentTitleChanged(long pView, long pArgs) {
1020
1034
return COM .S_OK ;
1021
1035
}
1022
1036
1023
- long handleCallJava (int index , long bstrToken , long bstrArgsJson ) {
1024
- Object result = null ;
1025
- String token = bstrToString (bstrToken );
1026
- BrowserFunction function = functions .get (index );
1027
- if (function != null && token .equals (function .token )) {
1028
- inCallback ++;
1029
- try {
1030
- String argsJson = bstrToString (bstrArgsJson );
1031
- Object args = JSON .parse (argsJson .toCharArray ());
1032
- result = function .function ((Object []) args );
1033
- } catch (Throwable e ) {
1034
- result = WebBrowser .CreateErrorString (e .getLocalizedMessage ());
1035
- } finally {
1036
- inCallback --;
1037
+ // This class should not be replaced by a lambda and not be renamed to ensure compatibility
1038
+ // with native image generation when using GraalVM
1039
+ // See https://github.com/eclipse-platform/eclipse.platform.swt/pull/2216
1040
+ static class HandleCoreWebView2SwtHost implements ICoreWebView2SwtHost {
1041
+ private final Map <Integer , BrowserFunction > functions ;
1042
+
1043
+ public HandleCoreWebView2SwtHost (Map <Integer , BrowserFunction > functions ) {
1044
+ this .functions = functions ;
1045
+ }
1046
+
1047
+ @ Override
1048
+ public long CallJava (int index , long bstrToken , long bstrArgsJson ) {
1049
+ Object result = null ;
1050
+ String token = bstrToString (bstrToken );
1051
+ BrowserFunction function = functions .get (index );
1052
+ if (function != null && token .equals (function .token )) {
1053
+ inCallback ++;
1054
+ try {
1055
+ String argsJson = bstrToString (bstrArgsJson );
1056
+ Object args = JSON .parse (argsJson .toCharArray ());
1057
+ result = function .function ((Object []) args );
1058
+ } catch (Throwable e ) {
1059
+ result = WebBrowser .CreateErrorString (e .getLocalizedMessage ());
1060
+ } finally {
1061
+ inCallback --;
1062
+ }
1037
1063
}
1064
+ String json = JSON .stringify (result );
1065
+ return COM .SysAllocStringLen (json .toCharArray (), json .length ());
1038
1066
}
1039
- String json = JSON .stringify (result );
1040
- return COM .SysAllocStringLen (json .toCharArray (), json .length ());
1041
1067
}
1042
1068
1043
1069
int handleFrameNavigationStarting (long pView , long pArgs ) {
0 commit comments