Skip to content

Commit b242200

Browse files
committed
part 35
1 parent 81dc8b3 commit b242200

File tree

13 files changed

+195
-139
lines changed

13 files changed

+195
-139
lines changed

test-app/runtime/src/main/cpp/napi/common/native_api_util.h

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,12 @@ namespace napi_util {
119119

120120
inline napi_value get__proto__(napi_env env, napi_value object) {
121121
napi_value proto;
122-
napi_get_property(env, object, Constants::Get(env)->protoValue, &proto);
122+
napi_get_property(env, object, Constants::Get(env)->protoValue(env), &proto);
123123
return proto;
124124
}
125125

126126
inline void set__proto__(napi_env env, napi_value object, napi_value __proto__) {
127-
napi_set_property(env, object, Constants::Get(env)->protoValue, __proto__);
127+
napi_set_property(env, object, Constants::Get(env)->protoValue(env), __proto__);
128128
}
129129

130130
inline napi_value getPrototypeOf(napi_env env, napi_value object) {
@@ -135,12 +135,12 @@ namespace napi_util {
135135

136136
inline napi_value get_prototype(napi_env env, napi_value object) {
137137
napi_value prototype;
138-
napi_get_property(env, object, Constants::Get(env)->prototypeValue, &prototype);
138+
napi_get_property(env, object, Constants::Get(env)->prototypeValue(env), &prototype);
139139
return prototype;
140140
}
141141

142142
inline void set_prototype(napi_env env, napi_value object, napi_value prototype) {
143-
napi_set_property(env, object, Constants::Get(env)->prototypeValue, prototype);
143+
napi_set_property(env, object, Constants::Get(env)->prototypeValue(env), prototype);
144144
}
145145

146146
inline char *get_string_value(napi_env env, napi_value str, size_t size = 0) {
@@ -233,14 +233,14 @@ namespace napi_util {
233233
napi_value numberCtor;
234234
napi_value global;
235235
napi_get_global(env, &global);
236-
napi_get_property(env, global, Constants::Get(env)->numberValue, &numberCtor);
236+
napi_get_property(env, global, Constants::Get(env)->numberValue(env), &numberCtor);
237237
napi_instanceof(env, value, numberCtor, &result);
238238
return result;
239239
}
240240

241241
inline napi_value valueOf(napi_env env, napi_value value) {
242242
napi_value valueOf, result;
243-
napi_get_property(env, value, Constants::Get(env)->valueOfValue, &valueOf);
243+
napi_get_property(env, value, Constants::Get(env)->valueOfValue(env), &valueOf);
244244
napi_call_function(env, value, valueOf, 0, nullptr, &result);
245245
return result;
246246
}
@@ -250,7 +250,7 @@ namespace napi_util {
250250
napi_value stringCtor;
251251
napi_value global;
252252
napi_get_global(env, &global);
253-
napi_get_property(env, global, Constants::Get(env)->stringValue, &stringCtor);
253+
napi_get_property(env, global, Constants::Get(env)->stringValue(env), &stringCtor);
254254
napi_instanceof(env, value, stringCtor, &result);
255255
return result;
256256
}
@@ -260,7 +260,7 @@ namespace napi_util {
260260
napi_value booleanCtor;
261261
napi_value global;
262262
napi_get_global(env, &global);
263-
napi_get_property(env, global, Constants::Get(env)->booleanValue, &booleanCtor);
263+
napi_get_property(env, global, Constants::Get(env)->booleanValue(env), &booleanCtor);
264264
napi_instanceof(env, value, booleanCtor, &result);
265265
return result;
266266
}
@@ -337,8 +337,8 @@ namespace napi_util {
337337
#else
338338
napi_value global, number, is_int, result;
339339
napi_get_global(env, &global);
340-
napi_get_property(env, global, Constants::Get(env)->numberValue, &number);
341-
napi_get_property(env, number, Constants::Get(env)->isIntegerValue, &is_int);
340+
napi_get_property(env, global, Constants::Get(env)->numberValue(env), &number);
341+
napi_get_property(env, number, Constants::Get(env)->isIntegerValue(env), &is_int);
342342
napi_call_function(env, number, is_int, 1, &value, &result);
343343

344344
return !napi_util::get_bool(env, result);
@@ -449,10 +449,10 @@ namespace napi_util {
449449
napi_value argv[2];
450450

451451
napi_get_global(env, &global);
452-
napi_get_property(env, global, Constants::Get(env)->objectValue, &global_object);
453-
napi_get_property(env, global_object, Constants::Get(env)->setPrototypeOf, &set_proto);
454-
napi_get_property(env, ctor, Constants::Get(env)->prototypeValue, &ctor_proto_prop);
455-
napi_get_property(env, super_ctor, Constants::Get(env)->prototypeValue, &super_ctor_proto_prop);
452+
napi_get_property(env, global, Constants::Get(env)->objectValue(env), &global_object);
453+
napi_get_property(env, global_object, Constants::Get(env)->setPrototypeOfValue(env), &set_proto);
454+
napi_get_property(env, ctor, Constants::Get(env)->prototypeValue(env), &ctor_proto_prop);
455+
napi_get_property(env, super_ctor, Constants::Get(env)->prototypeValue(env), &super_ctor_proto_prop);
456456

457457
bool exception;
458458

test-app/runtime/src/main/cpp/runtime/Runtime.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,11 @@ void Runtime::Init(JNIEnv *_env, jstring filesPath, jstring nativeLibsDir,
171171
v8::Context::Scope context_scope(env->context());
172172
#endif
173173
napi_open_handle_scope(env, &global_scope);
174-
Constants::Init(env);
175-
176174
napi_handle_scope handleScope;
177175
napi_open_handle_scope(env, &handleScope);
178176

177+
Constants::Init(env);
178+
179179
env_to_runtime_cache.emplace(env, this);
180180

181181
napi_value global;

test-app/runtime/src/main/cpp/runtime/callbackhandlers/CallbackHandlers.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -732,8 +732,6 @@ int CallbackHandlers::RunOnMainThreadFdCallback(int fd, int events, void *data)
732732
return 1;
733733
}
734734

735-
736-
737735
napi_env env = it->second.env_;
738736
napi_ref callback_ref = it->second.callback_;
739737

@@ -959,8 +957,6 @@ vector<string> CallbackHandlers::GetTypeMetadata(const string &name, int index)
959957
napi_value CallbackHandlers::CallJSMethod(napi_env env, JNIEnv *_jEnv,
960958
napi_value jsObject, const string &methodName,
961959
jobjectArray args) {
962-
963-
964960
JEnv jEnv(_jEnv);
965961
napi_value result;
966962
napi_value method;

test-app/runtime/src/main/cpp/runtime/constants/Constants.cpp

Lines changed: 90 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -17,53 +17,112 @@
1717
#define PROP_KEY_PROTOTYPE "prototype"
1818
#define PROP_KEY_CONSTRUCTOR "constructor"
1919

20+
#define DEFINE_PROP(env, propStr, fieldName) \
21+
do { \
22+
napi_value localVal = nullptr; \
23+
napi_create_string_utf8(env, propStr, NAPI_AUTO_LENGTH, &localVal); \
24+
napi_create_reference(env, localVal, 1, &fieldName); \
25+
} while(0)
26+
27+
#define PROP_GETTER(propName) \
28+
napi_value Constants::propName##Value(napi_env env) { \
29+
napi_value val = nullptr; \
30+
napi_get_reference_value(env, propName##ValueRef, &val); \
31+
return val; \
32+
}
33+
2034
std::unordered_map<napi_env, Constants*> Constants::s_constantsMap;
2135
std::string Constants::APP_ROOT_FOLDER_PATH;
2236
std::string Constants::V8_STARTUP_FLAGS;
2337

2438
Constants::Constants()
25-
: extendValue(nullptr), nullObjectValue(nullptr), nullNodeNameValue(nullptr),
26-
valueOfValue(nullptr), classValue(nullptr), privateTypeNameValue(nullptr),
27-
classImplementationObjectValue(nullptr), superValue(nullptr), superValueValue(nullptr),
28-
privateJsInfoValue(nullptr), privateCallSuperValue(nullptr), privateIsNapiValue(nullptr),
29-
toStringValue(nullptr), isPrototypeImplementationObjectValue(nullptr) {}
39+
: extendValueRef(nullptr),
40+
nullObjectValueRef(nullptr),
41+
nullNodeNameValueRef(nullptr),
42+
valueOfValueRef(nullptr),
43+
clsValueRef(nullptr),
44+
privateTypeNameValueRef(nullptr),
45+
classImplementationObjectValueRef(nullptr),
46+
superValueRef(nullptr),
47+
superValueValueRef(nullptr),
48+
privateJsInfoValueRef(nullptr),
49+
privateCallSuperValueRef(nullptr),
50+
privateIsNapiValueRef(nullptr),
51+
toStringValueRef(nullptr),
52+
isPrototypeImplementationObjectValueRef(nullptr),
53+
prototypeValueRef(nullptr),
54+
constructorValueRef(nullptr),
55+
nameValueRef(nullptr),
56+
objectValueRef(nullptr),
57+
numberValueRef(nullptr),
58+
isIntegerValueRef(nullptr),
59+
setPrototypeOfValueRef(nullptr),
60+
stringValueRef(nullptr),
61+
booleanValueRef(nullptr),
62+
protoValueRef(nullptr),
63+
valueValueRef(nullptr) {}
3064

3165
napi_status Constants::Init(napi_env env) {
3266
if (s_constantsMap.find(env) == s_constantsMap.end()) {
3367
auto* instance = new Constants();
3468

35-
napi_create_string_utf8(env, PROP_KEY_EXTEND, NAPI_AUTO_LENGTH, &instance->extendValue);
36-
napi_create_string_utf8(env, PROP_KEY_NULLOBJECT, NAPI_AUTO_LENGTH, &instance->nullObjectValue);
37-
napi_create_string_utf8(env, PROP_KEY_NULL_NODE_NAME, NAPI_AUTO_LENGTH, &instance->nullNodeNameValue);
38-
napi_create_string_utf8(env, PROP_KEY_VALUEOF, NAPI_AUTO_LENGTH, &instance->valueOfValue);
39-
napi_create_string_utf8(env, PROP_KEY_CLASS, NAPI_AUTO_LENGTH, &instance->classValue);
40-
napi_create_string_utf8(env, PRIVATE_TYPE_NAME, NAPI_AUTO_LENGTH, &instance->privateTypeNameValue);
41-
napi_create_string_utf8(env, CLASS_IMPLEMENTATION_OBJECT, NAPI_AUTO_LENGTH, &instance->classImplementationObjectValue);
42-
napi_create_string_utf8(env, PROP_KEY_SUPER, NAPI_AUTO_LENGTH, &instance->superValue);
43-
napi_create_string_utf8(env, PROP_KEY_SUPERVALUE, NAPI_AUTO_LENGTH, &instance->superValueValue);
44-
napi_create_string_utf8(env, PRIVATE_JSINFO, NAPI_AUTO_LENGTH, &instance->privateJsInfoValue);
45-
napi_create_string_utf8(env, PRIVATE_CALLSUPER, NAPI_AUTO_LENGTH, &instance->privateCallSuperValue);
46-
napi_create_string_utf8(env, PRIVATE_IS_NAPI, NAPI_AUTO_LENGTH, &instance->privateIsNapiValue);
47-
napi_create_string_utf8(env, PROP_KEY_TOSTRING, NAPI_AUTO_LENGTH, &instance->toStringValue);
48-
napi_create_string_utf8(env, PROP_KEY_IS_PROTOTYPE_IMPLEMENTATION_OBJECT, NAPI_AUTO_LENGTH, &instance->isPrototypeImplementationObjectValue);
49-
napi_create_string_utf8(env, PROP_KEY_PROTOTYPE, NAPI_AUTO_LENGTH, &instance->prototypeValue);
50-
napi_create_string_utf8(env, PROP_KEY_CONSTRUCTOR, NAPI_AUTO_LENGTH, &instance->constructorValue);
51-
52-
napi_create_string_utf8(env, "name", NAPI_AUTO_LENGTH, &instance->nameValue);
53-
napi_create_string_utf8(env, "Object", NAPI_AUTO_LENGTH, &instance->objectValue);
54-
napi_create_string_utf8(env, "Number", NAPI_AUTO_LENGTH, &instance->numberValue);
55-
napi_create_string_utf8(env, "isInteger", NAPI_AUTO_LENGTH, &instance->isIntegerValue);
56-
napi_create_string_utf8(env, "String", NAPI_AUTO_LENGTH, &instance->stringValue);
57-
napi_create_string_utf8(env, "Boolean", NAPI_AUTO_LENGTH, &instance->booleanValue);
58-
napi_create_string_utf8(env, "setPrototypeOf", NAPI_AUTO_LENGTH, &instance->setPrototypeOf);
59-
napi_create_string_utf8(env, "__proto__", NAPI_AUTO_LENGTH, &instance->protoValue);
60-
napi_create_string_utf8(env, "value", NAPI_AUTO_LENGTH, &instance->valueValue);
69+
DEFINE_PROP(env, PROP_KEY_EXTEND, instance->extendValueRef);
70+
DEFINE_PROP(env, PROP_KEY_NULLOBJECT, instance->nullObjectValueRef);
71+
DEFINE_PROP(env, PROP_KEY_NULL_NODE_NAME, instance->nullNodeNameValueRef);
72+
DEFINE_PROP(env, PROP_KEY_VALUEOF, instance->valueOfValueRef);
73+
DEFINE_PROP(env, PROP_KEY_CLASS, instance->clsValueRef);
74+
DEFINE_PROP(env, PRIVATE_TYPE_NAME, instance->privateTypeNameValueRef);
75+
DEFINE_PROP(env, CLASS_IMPLEMENTATION_OBJECT, instance->classImplementationObjectValueRef);
76+
DEFINE_PROP(env, PROP_KEY_SUPER, instance->superValueRef);
77+
DEFINE_PROP(env, PROP_KEY_SUPERVALUE, instance->superValueValueRef);
78+
DEFINE_PROP(env, PRIVATE_JSINFO, instance->privateJsInfoValueRef);
79+
DEFINE_PROP(env, PRIVATE_CALLSUPER, instance->privateCallSuperValueRef);
80+
DEFINE_PROP(env, PRIVATE_IS_NAPI, instance->privateIsNapiValueRef);
81+
DEFINE_PROP(env, PROP_KEY_TOSTRING, instance->toStringValueRef);
82+
DEFINE_PROP(env, PROP_KEY_IS_PROTOTYPE_IMPLEMENTATION_OBJECT, instance->isPrototypeImplementationObjectValueRef);
83+
DEFINE_PROP(env, PROP_KEY_PROTOTYPE, instance->prototypeValueRef);
84+
DEFINE_PROP(env, PROP_KEY_CONSTRUCTOR, instance->constructorValueRef);
85+
DEFINE_PROP(env, "name", instance->nameValueRef);
86+
DEFINE_PROP(env, "Object", instance->objectValueRef);
87+
DEFINE_PROP(env, "Number", instance->numberValueRef);
88+
DEFINE_PROP(env, "isInteger", instance->isIntegerValueRef);
89+
DEFINE_PROP(env, "setPrototypeOf", instance->setPrototypeOfValueRef);
90+
DEFINE_PROP(env, "String", instance->stringValueRef);
91+
DEFINE_PROP(env, "Boolean", instance->booleanValueRef);
92+
DEFINE_PROP(env, "__proto__", instance->protoValueRef);
93+
DEFINE_PROP(env, "value", instance->valueValueRef);
6194

6295
s_constantsMap[env] = instance;
6396
}
6497
return napi_ok;
6598
}
6699

100+
PROP_GETTER(extend)
101+
PROP_GETTER(nullObject)
102+
PROP_GETTER(nullNodeName)
103+
PROP_GETTER(valueOf)
104+
PROP_GETTER(cls)
105+
PROP_GETTER(privateTypeName)
106+
PROP_GETTER(classImplementationObject)
107+
PROP_GETTER(super)
108+
PROP_GETTER(superValue)
109+
PROP_GETTER(privateJsInfo)
110+
PROP_GETTER(privateCallSuper)
111+
PROP_GETTER(privateIsNapi)
112+
PROP_GETTER(toString)
113+
PROP_GETTER(isPrototypeImplementationObject)
114+
PROP_GETTER(prototype)
115+
PROP_GETTER(constructor)
116+
PROP_GETTER(name)
117+
PROP_GETTER(object)
118+
PROP_GETTER(number)
119+
PROP_GETTER(isInteger)
120+
PROP_GETTER(setPrototypeOf)
121+
PROP_GETTER(string)
122+
PROP_GETTER(boolean)
123+
PROP_GETTER(proto)
124+
PROP_GETTER(value)
125+
67126
Constants* Constants::Get(napi_env env) {
68127
auto it = s_constantsMap.find(env);
69128
if (it != s_constantsMap.end()) {

test-app/runtime/src/main/cpp/runtime/constants/Constants.h

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,44 +5,45 @@
55
#include <unordered_map>
66
#include <js_native_api.h>
77

8+
#define PROP(name) \
9+
napi_ref name##ValueRef; \
10+
napi_value name##Value(napi_env env);
11+
812
class Constants {
913
public:
1014
const static char CLASS_NAME_LOCATION_SEPARATOR = '_';
1115
static std::string APP_ROOT_FOLDER_PATH;
1216
static std::string V8_STARTUP_FLAGS;
1317

1418
static napi_status Init(napi_env env);
15-
1619
static Constants *Get(napi_env env);
17-
1820
static void DeInit(napi_env env);
1921

20-
napi_value extendValue;
21-
napi_value nullObjectValue;
22-
napi_value nullNodeNameValue;
23-
napi_value valueOfValue;
24-
napi_value classValue;
25-
napi_value privateTypeNameValue;
26-
napi_value classImplementationObjectValue;
27-
napi_value superValue;
28-
napi_value superValueValue;
29-
napi_value privateJsInfoValue;
30-
napi_value privateCallSuperValue;
31-
napi_value privateIsNapiValue;
32-
napi_value toStringValue;
33-
napi_value isPrototypeImplementationObjectValue;
34-
napi_value prototypeValue;
35-
napi_value constructorValue;
36-
napi_value nameValue;
37-
napi_value objectValue;
38-
napi_value numberValue;
39-
napi_value isIntegerValue;
40-
napi_value setPrototypeOf;
41-
napi_value stringValue;
42-
napi_value booleanValue;
43-
napi_value protoValue;
44-
napi_value valueValue;
45-
22+
PROP(extend)
23+
PROP(nullObject)
24+
PROP(nullNodeName)
25+
PROP(valueOf)
26+
PROP(cls)
27+
PROP(privateTypeName)
28+
PROP(classImplementationObject)
29+
PROP(super)
30+
PROP(superValue)
31+
PROP(privateJsInfo)
32+
PROP(privateCallSuper)
33+
PROP(privateIsNapi)
34+
PROP(toString)
35+
PROP(isPrototypeImplementationObject)
36+
PROP(prototype)
37+
PROP(constructor)
38+
PROP(name)
39+
PROP(object)
40+
PROP(number)
41+
PROP(isInteger)
42+
PROP(setPrototypeOf)
43+
PROP(string)
44+
PROP(boolean)
45+
PROP(proto)
46+
PROP(value)
4647

4748
private:
4849
Constants();

test-app/runtime/src/main/cpp/runtime/conversion/ArgConverter.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ void ArgConverter::Init(napi_env env) {
3333
&toStringFunc);
3434

3535

36-
napi_set_property(env, longNumberPrototype, Constants::Get(env)->valueOfValue, valueOfFunc);
37-
napi_set_property(env, longNumberPrototype, Constants::Get(env)->toStringValue, toStringFunc);
36+
napi_set_property(env, longNumberPrototype, Constants::Get(env)->valueOfValue(env), valueOfFunc);
37+
napi_set_property(env, longNumberPrototype, Constants::Get(env)->toStringValue(env), toStringFunc);
3838

3939
cache->LongNumberCtorFunc = napi_util::make_ref(env, longNumberCtorFunc, 1);
4040
napi_value nanValue;
@@ -45,7 +45,7 @@ void ArgConverter::Init(napi_env env) {
4545
napi_get_global(env, &global);
4646

4747
napi_value numCtor;
48-
napi_get_property(env, global, Constants::Get(env)->numberValue, &numCtor);
48+
napi_get_property(env, global, Constants::Get(env)->numberValue(env), &numCtor);
4949

5050
napi_value nanObject;
5151
napi_new_instance(env, numCtor, 1, &nanValue, &nanObject);
@@ -78,7 +78,7 @@ napi_value ArgConverter::NativeScriptLongToStringFunctionCallback(napi_env env,
7878
napi_get_cb_info(env, info, nullptr, nullptr, &thisArg, nullptr);
7979

8080
napi_value value;
81-
napi_get_property(env, thisArg, Constants::Get(env)->valueValue, &value);
81+
napi_get_property(env, thisArg, Constants::Get(env)->valueValue(env), &value);
8282

8383
return value;
8484
} catch (NativeScriptException &e) {
@@ -105,7 +105,7 @@ napi_value ArgConverter::NativeScriptLongFunctionCallback(napi_env env, napi_cal
105105

106106
NumericCasts::MarkAsLong(env, jsThis, argv[0]);
107107

108-
napi_set_property(env, jsThis, Constants::Get(env)->prototypeValue, napi_util::get_ref_value(env, cache->NanNumberObject));
108+
napi_set_property(env, jsThis, Constants::Get(env)->prototypeValue(env), napi_util::get_ref_value(env, cache->NanNumberObject));
109109
return jsThis;
110110

111111
} catch (NativeScriptException &e) {
@@ -216,7 +216,7 @@ napi_value ArgConverter::ConvertFromJavaLong(napi_env env, jlong value) {
216216

217217
int64_t ArgConverter::ConvertToJavaLong(napi_env env, napi_value value) {
218218
napi_value valueProp;
219-
napi_get_property(env, value, Constants::Get(env)->valueValue, &valueProp);
219+
napi_get_property(env, value, Constants::Get(env)->valueValue(env), &valueProp);
220220

221221
size_t str_len;
222222
napi_get_value_string_utf8(env, valueProp, nullptr, 0, &str_len);

test-app/runtime/src/main/cpp/runtime/conversion/JsArgConverter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ bool JsArgConverter::ConvertArg(napi_env env, napi_value arg, int index) {
301301
}
302302

303303
napi_value nullNode;
304-
napi_get_property(env, arg, Constants::Get(env)->nullNodeNameValue, &nullNode);
304+
napi_get_property(env, arg, Constants::Get(env)->nullNodeNameValue(env), &nullNode);
305305
if (!napi_util::is_null_or_undefined(env, nullNode)) {
306306
SetConvertedObject(index, nullptr);
307307
success = true;

0 commit comments

Comments
 (0)