void TJClassRef::setField(const std::string& fieldName, jobject value) { JNIEnv* environment = TJGetEnvironment(); if (environment == nullptr) throw TJNIException(kThreadDetached, "Failed to get jnienv in TJClassRef::setObjectField"); if (value == nullptr) throw TJInvalidArgument("Null value in setField"); TJClassRef classRef(environment->GetObjectClass(value), kLocalRef); jfieldID fieldDescriptor = environment->GetStaticFieldID(mHandle, fieldName.c_str(), classRef.descriptor().c_str()); if (fieldDescriptor == nullptr) GenerateJavaException(environment, environment->ExceptionOccurred(), "GetStaticFieldID failed in TJClassRef::setObjectField"); environment->SetStaticObjectField(mHandle, fieldDescriptor, value); }
std::shared_ptr<interface::IClass> createClass (Key&& _key) { typedef interface::IClass class_t; typedef interface::IObject object_t; typedef std::shared_ptr<class_t> classref_t; typedef std::shared_ptr<object_t> objectref_t; typedef object::NativeObject<T> object_impl; typedef object::ObjectClass<T> class_impl; static Hasher hasher; class_t* class_ptr = new class_impl; class_t& class_ref = *class_ptr; classref_t classRef (class_ptr); class_ref.self(classRef); class_ref.prototype(object_impl(T(), typename object_impl::silent_t())); class_ref.id(hasher(std::forward<Key>(_key))); return classRef; }