diff --git a/frameworks/ets/ani/native_constructor/context_native_constructor.cpp b/frameworks/ets/ani/native_constructor/context_native_constructor.cpp index 2326c5f48bdbd1078317a50e95df562b3989b576..fac3b89d47a4dcad59480ae153772caa00dc0806 100644 --- a/frameworks/ets/ani/native_constructor/context_native_constructor.cpp +++ b/frameworks/ets/ani/native_constructor/context_native_constructor.cpp @@ -13,27 +13,20 @@ * limitations under the License. */ #include -#include #include "hilog_tag_wrapper.h" namespace OHOS { namespace AbilityRuntime { -void ContextConstructor() -{ -} +void ContextConstructor() {} -void ExtensionContextConstructor() -{ -} +void ExtensionContextConstructor() {} -void UIAbilityContextConstructor() -{ -} +void UIAbilityContextConstructor() {} extern "C" { ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) { - ani_env *env; + ani_env *env = nullptr; if (vm == nullptr || result == nullptr) { TAG_LOGE(AAFwkTag::ETSRUNTIME, "Illegal VM or result"); return ANI_ERROR; @@ -42,47 +35,47 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) TAG_LOGE(AAFwkTag::ETSRUNTIME, "Unsupported ANI_VERSION_1"); return ANI_ERROR; } - ani_class contextClass; + ani_class contextClass = nullptr; static const char *contextClassName = "Lapplication/Context/Context;"; if (ANI_OK != env->FindClass(contextClassName, &contextClass)) { TAG_LOGE(AAFwkTag::ETSRUNTIME, "Not found class %{public}s.", contextClassName); return ANI_NOT_FOUND; } - std::array classMethods_context = { + std::array classMethodsContext = { ani_native_function {"", ":V", reinterpret_cast(ContextConstructor)}, }; - if (ANI_OK != env->Class_BindNativeMethods(contextClass, classMethods_context.data(), - classMethods_context.size())) { + if (ANI_OK != env->Class_BindNativeMethods(contextClass, classMethodsContext.data(), + classMethodsContext.size())) { TAG_LOGE(AAFwkTag::ETSRUNTIME, "Cannot bind native ctor to class %{public}s.", contextClassName); return ANI_ERROR; }; - ani_class extensionContextClass; + ani_class extensionContextClass = nullptr; static const char *extensionContextClassName = "Lapplication/ExtensionContext/ExtensionContext;"; if (ANI_OK != env->FindClass(extensionContextClassName, &extensionContextClass)) { TAG_LOGE(AAFwkTag::ETSRUNTIME, "Not found class %{public}s.", extensionContextClassName); return ANI_NOT_FOUND; } - std::array classMethods_extensionContext = { + std::array classMethodsExtensionContext = { ani_native_function {"", ":V", reinterpret_cast(ExtensionContextConstructor)}, }; - if (ANI_OK != env->Class_BindNativeMethods(extensionContextClass, classMethods_extensionContext.data(), - classMethods_extensionContext.size())) { + if (ANI_OK != env->Class_BindNativeMethods(extensionContextClass, classMethodsExtensionContext.data(), + classMethodsExtensionContext.size())) { TAG_LOGE(AAFwkTag::ETSRUNTIME, "Cannot bind native ctor to class %{public}s.", extensionContextClassName); return ANI_ERROR; }; - ani_class uiAbilityClass; + ani_class uiAbilityClass = nullptr; static const char *uiAbilityClassName = "Lapplication/UIAbilityContext/UIAbilityContext;"; if (ANI_OK != env->FindClass(uiAbilityClassName, &uiAbilityClass)) { TAG_LOGE(AAFwkTag::ETSRUNTIME, "Not found class %{public}s.", uiAbilityClassName); return ANI_NOT_FOUND; } - std::array classMethods_uiAbility = { + std::array classMethodsUiAbility = { ani_native_function {"", ":V", reinterpret_cast(UIAbilityContextConstructor)}, }; - if (ANI_OK != env->Class_BindNativeMethods(uiAbilityClass, classMethods_uiAbility.data(), - classMethods_uiAbility.size())) { + if (ANI_OK != env->Class_BindNativeMethods(uiAbilityClass, classMethodsUiAbility.data(), + classMethodsUiAbility.size())) { TAG_LOGE(AAFwkTag::ETSRUNTIME, "Cannot bind native ctor to class %{public}s.", uiAbilityClassName); return ANI_ERROR; }; diff --git a/frameworks/native/appkit/BUILD.gn b/frameworks/native/appkit/BUILD.gn index ddd25fc1fafb0efc478690fc094dc21e754e770e..3e605624b5970b1e9eec720410346f23deba6559 100644 --- a/frameworks/native/appkit/BUILD.gn +++ b/frameworks/native/appkit/BUILD.gn @@ -619,7 +619,6 @@ ohos_shared_library("application_context_manager") { include_dirs = [ "${ability_runtime_path}/interfaces/inner_api/runtime/include", "${ability_runtime_path}/interfaces/kits/native/ability/native", - "${ability_runtime_path}/ets_environment/interfaces/inner_api", ] sources = [ "${ability_runtime_native_path}/appkit/ability_runtime/context/application_context_manager.cpp" ] @@ -630,10 +629,8 @@ ohos_shared_library("application_context_manager") { } external_deps = [ - "ets_runtime:libark_jsruntime", "hilog:libhilog", "napi:ace_napi", - "runtime_core:ani", ] public_configs = [ ":application_context_manager_config" ] diff --git a/frameworks/native/appkit/ability_runtime/context/application_context_manager.cpp b/frameworks/native/appkit/ability_runtime/context/application_context_manager.cpp index 073170d29b5d7502b06cbb61679d85ed2a9c1831..bbebe59874ffccfa4dc6f7a614c19a109ac18ad9 100644 --- a/frameworks/native/appkit/ability_runtime/context/application_context_manager.cpp +++ b/frameworks/native/appkit/ability_runtime/context/application_context_manager.cpp @@ -89,37 +89,17 @@ void ApplicationContextManager::RemoveGlobalObject(napi_env env) } } -void ApplicationContextManager::AddEtsGlobalObject(ani_env* env, +void ApplicationContextManager::SetEtsGlobalObject( std::shared_ptr applicationContextObj) { - std::lock_guard lock(etsApplicationContextMutex_); - auto iter = etsApplicationContextMap_.find(env); - if (iter == etsApplicationContextMap_.end()) { - etsApplicationContextMap_[env] = applicationContextObj; - return; - } - if (iter->second != nullptr) { - iter->second.reset(); - iter->second = nullptr; - } - iter->second = applicationContextObj; -} - -std::shared_ptr ApplicationContextManager::GetEtsGlobalObject(ani_env* env) -{ - std::lock_guard lock(etsApplicationContextMutex_); - return etsApplicationContextMap_[env]; + std::lock_guard lock(applicationContextMutex_); + etsApplicationContextRef_ = applicationContextObj; } -void ApplicationContextManager::RemoveEtsGlobalObject(ani_env* env) +std::shared_ptr ApplicationContextManager::GetEtsGlobalObject() { - std::lock_guard lock(etsApplicationContextMutex_); - auto iter = etsApplicationContextMap_.find(env); - if (iter != etsApplicationContextMap_.end() && iter->second != nullptr) { - iter->second.reset(); - iter->second = nullptr; - etsApplicationContextMap_.erase(env); - } + std::lock_guard lock(applicationContextMutex_); + return etsApplicationContextRef_; } } // namespace AbilityRuntime } // namespace OHOS diff --git a/frameworks/native/appkit/ability_runtime/context/ets_application_context_utils.cpp b/frameworks/native/appkit/ability_runtime/context/ets_application_context_utils.cpp index b7aec88b2f2a7fa309fad57ec56ee42f1df18337..135a7e536e3b5b2d92b0dfd9ee51fa5c5a7f7447 100644 --- a/frameworks/native/appkit/ability_runtime/context/ets_application_context_utils.cpp +++ b/frameworks/native/appkit/ability_runtime/context/ets_application_context_utils.cpp @@ -160,7 +160,7 @@ ani_object EtsApplicationContextUtils::CreateEtsApplicationContext(ani_env* aniE } auto etsReference = std::make_shared(); etsReference->aniObj = applicationContextObject; - AbilityRuntime::ApplicationContextManager::GetApplicationContextManager().AddEtsGlobalObject(aniEnv, etsReference); + AbilityRuntime::ApplicationContextManager::GetApplicationContextManager().SetEtsGlobalObject(etsReference); BindApplicationContextFunc(aniEnv); return applicationContextObject; } diff --git a/frameworks/native/appkit/ability_runtime/context/ets_context_utils.cpp b/frameworks/native/appkit/ability_runtime/context/ets_context_utils.cpp index eac017820b38b3c9da834e44c549ffecccf1929a..b9ae514d35782058b0541bfc55c0c351cd51149d 100644 --- a/frameworks/native/appkit/ability_runtime/context/ets_context_utils.cpp +++ b/frameworks/native/appkit/ability_runtime/context/ets_context_utils.cpp @@ -29,7 +29,7 @@ namespace OHOS { namespace AbilityRuntime { namespace ContextUtil { namespace { - constexpr const char* CONTEXT_CLASS_NAME = "Lapplication/Context/Context;"; +constexpr const char* CONTEXT_CLASS_NAME = "Lapplication/Context/Context;"; } void BindApplicationInfo(ani_env* aniEnv, ani_class contextClass, ani_object contextObj, std::shared_ptr context) @@ -99,9 +99,9 @@ void BindParentProperty(ani_env* aniEnv, ani_class contextClass, ani_object cont return; } auto filesDir = context->GetFilesDir(); - ani_string filesDir_string{}; - aniEnv->String_NewUTF8(filesDir.c_str(), filesDir.size(), &filesDir_string); - if (aniEnv->Object_SetField_Ref(contextObj, filesDirField, reinterpret_cast(filesDir_string)) != ANI_OK) { + ani_string filesDirString{}; + aniEnv->String_NewUTF8(filesDir.c_str(), filesDir.size(), &filesDirString); + if (aniEnv->Object_SetField_Ref(contextObj, filesDirField, reinterpret_cast(filesDirString)) != ANI_OK) { TAG_LOGE(AAFwkTag::APPKIT, "Object_SetField_Ref failed"); return; } @@ -111,9 +111,9 @@ void BindParentProperty(ani_env* aniEnv, ani_class contextClass, ani_object cont return; } auto tempDir = context->GetTempDir(); - ani_string tempDir_string{}; - aniEnv->String_NewUTF8(tempDir.c_str(), tempDir.size(), &tempDir_string); - if (aniEnv->Object_SetField_Ref(contextObj, tempDirField, reinterpret_cast(tempDir_string)) != ANI_OK) { + ani_string tempDirString{}; + aniEnv->String_NewUTF8(tempDir.c_str(), tempDir.size(), &tempDirString); + if (aniEnv->Object_SetField_Ref(contextObj, tempDirField, reinterpret_cast(tempDirString)) != ANI_OK) { TAG_LOGE(AAFwkTag::APPKIT, "Object_SetField_Ref failed"); return; } @@ -211,7 +211,7 @@ ani_object GetApplicationContextSync([[maybe_unused]]ani_env *env, [[maybe_unuse return {}; } if (!applicationContext->GetApplicationInfoUpdateFlag()) { - auto appContextObj = ApplicationContextManager::GetApplicationContextManager().GetEtsGlobalObject(env); + auto appContextObj = ApplicationContextManager::GetApplicationContextManager().GetEtsGlobalObject(); if (appContextObj != nullptr) { TAG_LOGE(AAFwkTag::APPKIT, "appContextObj is not nullptr"); return appContextObj->aniObj; diff --git a/interfaces/inner_api/ani_base_context/include/ani_base_context.h b/interfaces/inner_api/ani_base_context/include/ani_base_context.h index b9ba82e8ea3850f5c5c5f603e67ed663ff049f5c..24350f8dac0be4feae85321ef993ce20310f44fb 100644 --- a/interfaces/inner_api/ani_base_context/include/ani_base_context.h +++ b/interfaces/inner_api/ani_base_context/include/ani_base_context.h @@ -48,7 +48,6 @@ ani_status IsStageContext(ani_env* env, ani_object object, ani_boolean& stageMod * @param object Native value of context. * @return The stage mode context. */ -class Context; std::shared_ptr GetStageModeContext(ani_env* env, ani_object object); } } diff --git a/interfaces/kits/native/appkit/ability_runtime/context/application_context_manager.h b/interfaces/kits/native/appkit/ability_runtime/context/application_context_manager.h index bb307cb09267d498d5ddb67ce1eefdbe290b7a3c..1b57ccfd754b6840795626a3d64ee1ff00d412e0 100644 --- a/interfaces/kits/native/appkit/ability_runtime/context/application_context_manager.h +++ b/interfaces/kits/native/appkit/ability_runtime/context/application_context_manager.h @@ -17,7 +17,6 @@ #define OHOS_ABILITY_RUNTIME_APPLICATION_CONTEXT_MANAGER_H #include "native_engine/native_engine.h" -#include "ets_runtime.h" #include #include @@ -28,7 +27,7 @@ struct EnvData { napi_env env; EnvData(napi_env napienv) : env(napienv) {} }; - +struct ETSNativeReference; class ApplicationContextManager { public: ApplicationContextManager(const ApplicationContextManager&) = delete; @@ -43,11 +42,9 @@ public: void RemoveGlobalObject(napi_env env); - void AddEtsGlobalObject(ani_env* env, std::shared_ptr applicationContextObj); - - std::shared_ptr GetEtsGlobalObject(ani_env* env); + void SetEtsGlobalObject(std::shared_ptr applicationContextObj); - void RemoveEtsGlobalObject(ani_env* env); + std::shared_ptr GetEtsGlobalObject(); private: ApplicationContextManager(); @@ -55,9 +52,8 @@ private: ~ApplicationContextManager(); std::unordered_map> applicationContextMap_; - std::unordered_map> etsApplicationContextMap_; + std::shared_ptr etsApplicationContextRef_; std::mutex applicationContextMutex_; - std::mutex etsApplicationContextMutex_; }; } // namespace AbilityRuntime } // namespace OHOS