@@ -1117,7 +1117,11 @@ private AttachResult recurseAndAttach(String name, Object o, Set<Object> seen) {
1117
1117
return AttachResult .dirty (value );
1118
1118
}
1119
1119
}
1120
- if (o instanceof JsFunction ) {
1120
+ if (o instanceof Class ) {
1121
+ Class clazz = (Class ) o ;
1122
+ Value value = JS .evalForValue ("Java.type('" + clazz .getCanonicalName () + "')" );
1123
+ return AttachResult .dirty (value );
1124
+ } else if (o instanceof JsFunction ) {
1121
1125
JsFunction jf = (JsFunction ) o ;
1122
1126
try {
1123
1127
return AttachResult .dirty (attachSource (jf .source ));
@@ -1169,7 +1173,11 @@ private Object recurseAndAttachAndDeepClone(String name, Object o, Set<Object> s
1169
1173
return null ;
1170
1174
}
1171
1175
}
1172
- if (o instanceof JsFunction ) {
1176
+ if (o instanceof Class ) {
1177
+ Class clazz = (Class ) o ;
1178
+ Value value = JS .evalForValue ("Java.type('" + clazz .getCanonicalName () + "')" );
1179
+ return value ;
1180
+ } else if (o instanceof JsFunction ) {
1173
1181
JsFunction jf = (JsFunction ) o ;
1174
1182
try {
1175
1183
return attachSource (jf .source );
@@ -1212,20 +1220,20 @@ protected Object recurseAndDetachAndDeepClone(Object o) {
1212
1220
1213
1221
private Object recurseAndDetachAndDeepClone (String name , Object o , Set <Object > seen ) {
1214
1222
if (o instanceof Value ) {
1215
- Value value = ( Value ) o ;
1223
+ Value value = Value . asValue ( o ) ;
1216
1224
try {
1217
- if (value .canExecute ()) {
1225
+ if (value .canExecute ()) {
1218
1226
if (value .isMetaObject ()) { // js function
1219
1227
return new JsFunction (value );
1220
1228
} else { // java function
1221
1229
return new JsExecutable (value );
1222
1230
}
1223
- } else {
1224
- return value ;
1231
+ } else if ( value . isHostObject ()) {
1232
+ return value . asHostObject () ;
1225
1233
}
1226
1234
} catch (Exception e ) {
1227
- logger .warn ("[*** detach deep ***] ignoring non-json value in callonce / callSingle: '{}' - {}" , e .getMessage ());
1228
- return value ; // try our luck
1235
+ logger .warn ("[*** detach deep ***] ignoring non-json value in callonce / callSingle: '{}' - {}" , name , e .getMessage ());
1236
+ return null ;
1229
1237
}
1230
1238
}
1231
1239
if (o instanceof List ) {
0 commit comments