@@ -310,7 +310,7 @@ napi_value MetadataNode::GetImplementationObject(napi_env env, napi_value object
310310void MetadataNode::SetInstanceMetadata (napi_env env, napi_value object, MetadataNode *node) {
311311 auto cache = GetMetadataNodeCache (env);
312312 napi_value external;
313- napi_create_external (env, node, [](napi_env env, void *d1,void *d2){}, node, &external);
313+ napi_create_external (env, node, [](napi_env env, void *d1, void *d2) {}, node, &external);
314314 napi_set_named_property (env, object, " #instance_metadata" , external);
315315// napi_wrap(env, object, node, nullptr, nullptr, nullptr);
316316}
@@ -728,7 +728,7 @@ string MetadataNode::GetName() {
728728
729729MetadataNode *MetadataNode::GetOrCreate (const string &className) {
730730 MetadataNode *node = nullptr ;
731-
731+
732732 auto it = s_name2NodeCache.find (className);
733733
734734 if (it == s_name2NodeCache.end ()) {
@@ -752,8 +752,25 @@ MetadataNode *MetadataNode::GetOrCreateInternal(MetadataTreeNode *treeNode) {
752752 if (it != s_treeNode2NodeCache.end ()) {
753753 result = it->second ;
754754 } else {
755- result = new MetadataNode (treeNode);
755+ auto name = GetJniClassName (treeNode);
756+ if (!name.empty ()) {
757+ auto it2 = s_name2NodeCache.find (name);
758+ if ( it2 != s_name2NodeCache.end ()) {
759+ result = it2->second ;
760+ }
761+ }
762+
763+ if (!result) {
764+ result = new MetadataNode (treeNode);
765+ s_treeNode2NodeCache.emplace (treeNode, result);
766+ if (!result->m_name .empty ()) {
767+ s_name2NodeCache.emplace (result->m_name , result);
768+ }
769+ }
770+ }
756771
772+ auto found = s_treeNode2NodeCache.find (treeNode);
773+ if (found == s_treeNode2NodeCache.end ()) {
757774 s_treeNode2NodeCache.emplace (treeNode, result);
758775 }
759776
@@ -905,7 +922,7 @@ void MetadataNode::RegisterSymbolHasInstanceCallback(napi_env env, const Metadat
905922 napi_value method;
906923 napi_create_function (env, " hasInstance" , NAPI_AUTO_LENGTH, SymbolHasInstanceCallback, clazz,
907924 &method);
908-
925+
909926 napi_property_descriptor desc = {
910927 nullptr , // utf8name
911928 hasInstance, // name
@@ -1528,7 +1545,8 @@ napi_value MetadataNode::NullObjectAccessorGetterCallback(napi_env env, napi_cal
15281545 if (!value) {
15291546 auto node = reinterpret_cast <MetadataNode *>(data);
15301547 napi_value external;
1531- napi_create_external (env, node, [](napi_env env, void * d1, void *d2) {}, node, &external);
1548+ napi_create_external (env, node, [](napi_env env, void *d1, void *d2) {}, node,
1549+ &external);
15321550 napi_set_named_property (env, jsThis, PROP_KEY_NULL_NODE_NAME, external);
15331551
15341552 napi_util::napi_set_function (env,
@@ -1583,7 +1601,8 @@ napi_value MetadataNode::FieldAccessorGetterCallback(napi_env env, napi_callback
15831601 if (isHolder) {
15841602 return UNDEFINED;
15851603 } else {
1586- napi_set_named_property (env, jsThis, " __napi::this" , napi_util::get_true (env));
1604+ napi_set_named_property (env, jsThis, " __napi::this" ,
1605+ napi_util::get_true (env));
15871606 }
15881607 }
15891608 }
@@ -1627,7 +1646,8 @@ napi_value MetadataNode::FieldAccessorSetterCallback(napi_env env, napi_callback
16271646 if (isHolder) {
16281647 return UNDEFINED;
16291648 } else {
1630- napi_set_named_property (env, jsThis, " __napi::this" , napi_util::get_true (env));
1649+ napi_set_named_property (env, jsThis, " __napi::this" ,
1650+ napi_util::get_true (env));
16311651 }
16321652 }
16331653 }
0 commit comments