static void onPropertyChangedForProxy(Isolate* isolate, Local<String> property, Local<Value> value, Local<Object> proxyObject) { Proxy* proxy = NativeObject::Unwrap<Proxy>(proxyObject); JNIEnv* env = JNIScope::getEnv(); if (!env) { LOG_JNIENV_GET_ERROR(TAG); return; } jstring javaProperty = TypeConverter::jsStringToJavaString(env, property); bool javaValueIsNew; jobject javaValue = TypeConverter::jsValueToJavaObject(isolate, env, value, &javaValueIsNew); jobject javaProxy = proxy->getJavaObject(); env->CallVoidMethod(javaProxy, JNIUtil::krollProxyOnPropertyChangedMethod, javaProperty, javaValue); if (!JavaObject::useGlobalRefs) { env->DeleteLocalRef(javaProxy); } env->DeleteLocalRef(javaProperty); if (javaValueIsNew) { env->DeleteLocalRef(javaValue); } // Store new property value on JS internal map. setPropertyOnProxy(isolate, property, value, proxyObject); }
void Proxy::setIndexedProperty(uint32_t index, Local<Value> value, const PropertyCallbackInfo<Value>& info) { Isolate* isolate = info.GetIsolate(); JNIEnv* env = JNIScope::getEnv(); if (!env) { LOG_JNIENV_GET_ERROR(TAG); // Returns undefined by default return; } Proxy* proxy = NativeObject::Unwrap<Proxy>(info.Holder()); bool javaValueIsNew; jobject javaValue = TypeConverter::jsValueToJavaObject(isolate, env, value, &javaValueIsNew); jobject javaProxy = proxy->getJavaObject(); env->CallVoidMethod(javaProxy, JNIUtil::krollProxySetIndexedPropertyMethod, index, javaValue); if (!JavaObject::useGlobalRefs) { env->DeleteLocalRef(javaProxy); } if (javaValueIsNew) { env->DeleteLocalRef(javaValue); } info.GetReturnValue().Set(value); }
Handle<Value> Proxy::setIndexedProperty(uint32_t index, Local<Value> value, const AccessorInfo& info) { JNIEnv* env = JNIScope::getEnv(); if (!env) { LOG_JNIENV_GET_ERROR(TAG); return Undefined(); } Proxy* proxy = NativeObject::Unwrap<Proxy>(info.Holder()); bool javaValueIsNew; jobject javaValue = TypeConverter::jsValueToJavaObject(value, &javaValueIsNew); jobject javaProxy = proxy->getJavaObject(); env->CallVoidMethod(javaProxy, JNIUtil::krollProxySetIndexedPropertyMethod, index, javaValue); if (!JavaObject::useGlobalRefs) { env->DeleteLocalRef(javaProxy); } if (javaValueIsNew) { env->DeleteLocalRef(javaValue); } return value; }