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

Method GetJavaField

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

Source from the content-addressed store, hash-verified

9using namespace tns;
10
11Local<Value> FieldAccessor::GetJavaField(Isolate* isolate, const Local<Object>& target, FieldCallbackData* fieldData) {
12 JEnv env;
13
14 EscapableHandleScope handleScope(isolate);
15 auto runtime = Runtime::GetRuntime(isolate);
16 auto objectManager = runtime->GetObjectManager();
17
18 Local<Value> fieldResult;
19
20 JniLocalRef targetJavaObject;
21
22 auto &fieldMetadata = fieldData->metadata;
23
24 const auto& fieldTypeName = fieldMetadata.getSig();
25 auto isStatic = fieldMetadata.isStatic;
26
27 auto isPrimitiveType = fieldTypeName.size() == 1;
28 auto isFieldArray = fieldTypeName[0] == '[';
29
30 if (fieldData->fid == nullptr) {
31 auto fieldJniSig = isPrimitiveType
32 ? fieldTypeName
33 :
34 (isFieldArray
35 ? fieldTypeName
36 :
37 ("L" + fieldTypeName + ";"));
38
39 if (isStatic) {
40 fieldData->clazz = env.FindClass(fieldMetadata.getDeclaringType());
41 fieldData->fid = env.GetStaticFieldID(fieldData->clazz, fieldMetadata.name, fieldJniSig);
42 } else {
43 fieldData->clazz = env.FindClass(fieldMetadata.getDeclaringType());
44 fieldData->fid = env.GetFieldID(fieldData->clazz, fieldMetadata.name, fieldJniSig);
45 }
46 }
47
48 if (!isStatic) {
49 targetJavaObject = objectManager->GetJavaObjectByJsObject(target);
50
51 if (targetJavaObject.IsNull()) {
52 stringstream ss;
53 ss << "Cannot access property '" << fieldMetadata.name.c_str() << "' because there is no corresponding Java object";
54 throw NativeScriptException(ss.str());
55 }
56 }
57
58 auto fieldId = fieldData->fid;
59 auto clazz = fieldData->clazz;
60
61 if (isPrimitiveType) {
62 switch (fieldTypeName[0]) {
63 case 'Z': { //bool
64 jboolean result;
65 if (isStatic) {
66 result = env.GetStaticBooleanField(clazz, fieldId);
67 } else {
68 result = env.GetBooleanField(targetJavaObject, fieldId);

Callers

nothing calls this directly

Calls 15

NewFunction · 0.85
GetObjectManagerMethod · 0.80
GetStaticFieldIDMethod · 0.80
GetFieldIDMethod · 0.80
GetStaticBooleanFieldMethod · 0.80
GetBooleanFieldMethod · 0.80
GetStaticByteFieldMethod · 0.80
GetByteFieldMethod · 0.80
GetStaticCharFieldMethod · 0.80
GetCharFieldMethod · 0.80
NewStringMethod · 0.80

Tested by

no test coverage detected