MCPcopy Create free account
hub / github.com/NativeScript/android / SetJavaField

Method SetJavaField

test-app/runtime/src/main/cpp/FieldAccessor.cpp:188–347  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

186}
187
188void FieldAccessor::SetJavaField(Isolate* isolate, const Local<Object>& target, const Local<Value>& value, FieldCallbackData* fieldData) {
189 JEnv env;
190
191 auto &fieldMetadata = fieldData->metadata;
192
193 HandleScope handleScope(isolate);
194 auto runtime = Runtime::GetRuntime(isolate);
195 auto objectManager = runtime->GetObjectManager();
196
197 JniLocalRef targetJavaObject;
198
199 const auto& fieldTypeName = fieldMetadata.getSig();
200 auto isStatic = fieldMetadata.isStatic;
201
202
203 auto isPrimitiveType = fieldTypeName.size() == 1;
204 auto isFieldArray = fieldTypeName[0] == '[';
205
206 if (fieldData->fid == nullptr) {
207 auto fieldJniSig = isPrimitiveType
208 ? fieldTypeName
209 :
210 (isFieldArray
211 ? fieldTypeName
212 :
213 ("L" + fieldTypeName + ";"));
214
215 if (isStatic) {
216 fieldData->clazz = env.FindClass(fieldMetadata.getDeclaringType());
217 assert(fieldData->clazz != nullptr);
218 fieldData->fid = env.GetStaticFieldID(fieldData->clazz, fieldMetadata.name, fieldJniSig);
219 assert(fieldData->fid != nullptr);
220 } else {
221 fieldData->clazz = env.FindClass(fieldMetadata.getDeclaringType());
222 assert(fieldData->clazz != nullptr);
223 fieldData->fid = env.GetFieldID(fieldData->clazz, fieldMetadata.name, fieldJniSig);
224 assert(fieldData->fid != nullptr);
225 }
226 }
227
228 if (!isStatic) {
229 targetJavaObject = objectManager->GetJavaObjectByJsObject(target);
230
231 if (targetJavaObject.IsNull()) {
232 stringstream ss;
233 ss << "Cannot access property '" << fieldMetadata.name.c_str() << "' because there is no corresponding Java object";
234 throw NativeScriptException(ss.str());
235 }
236 }
237
238 auto fieldId = fieldData->fid;
239 auto clazz = fieldData->clazz;
240
241 if (isPrimitiveType) {
242 auto context = isolate->GetCurrentContext();
243 switch (fieldTypeName[0]) {
244 case 'Z': { //bool
245 //TODO: validate value is a boolean before calling

Callers

nothing calls this directly

Calls 15

GetObjectManagerMethod · 0.80
GetStaticFieldIDMethod · 0.80
GetFieldIDMethod · 0.80
SetStaticBooleanFieldMethod · 0.80
BooleanValueMethod · 0.80
SetBooleanFieldMethod · 0.80
SetStaticByteFieldMethod · 0.80
ToCheckedMethod · 0.80
SetByteFieldMethod · 0.80
ToLocalCheckedMethod · 0.80
NewStringUTFMethod · 0.80

Tested by

no test coverage detected