PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react

Просмотр файла: CoreModulesPackage.kt

/*
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

package com.facebook.react

import com.facebook.react.bridge.NativeModule
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactMarker
import com.facebook.react.bridge.ReactMarkerConstants
import com.facebook.react.common.ClassFinder
import com.facebook.react.common.annotations.internal.LegacyArchitecture
import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel
import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger
import com.facebook.react.devsupport.LogBoxModule
import com.facebook.react.module.annotations.ReactModule
import com.facebook.react.module.annotations.ReactModuleList
import com.facebook.react.module.model.ReactModuleInfo
import com.facebook.react.module.model.ReactModuleInfoProvider
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler
import com.facebook.react.modules.core.DeviceEventManagerModule
import com.facebook.react.modules.core.ExceptionsManagerModule
import com.facebook.react.modules.core.HeadlessJsTaskSupportModule
import com.facebook.react.modules.core.TimingModule
import com.facebook.react.modules.debug.DevMenuModule
import com.facebook.react.modules.debug.DevSettingsModule
import com.facebook.react.modules.debug.SourceCodeModule
import com.facebook.react.modules.deviceinfo.DeviceInfoModule
import com.facebook.react.modules.systeminfo.AndroidInfoModule
import com.facebook.react.uimanager.UIManagerModule
import com.facebook.react.uimanager.ViewManager
import com.facebook.react.uimanager.ViewManagerResolver
import com.facebook.systrace.Systrace

/**
 * This is the basic module to support React Native. The debug modules are now in DebugCorePackage.
 */
@ReactModuleList(
    // WARNING: If you modify this list, ensure that the list below in method
    // getReactModuleInfoByInitialization is also updated
    nativeModules =
        [
            AndroidInfoModule::class,
            DeviceEventManagerModule::class,
            DeviceInfoModule::class,
            DevMenuModule::class,
            DevSettingsModule::class,
            ExceptionsManagerModule::class,
            LogBoxModule::class,
            HeadlessJsTaskSupportModule::class,
            SourceCodeModule::class,
            TimingModule::class,
            UIManagerModule::class])
@LegacyArchitecture(logLevel = LegacyArchitectureLogLevel.ERROR)
internal class CoreModulesPackage(
    private val reactInstanceManager: ReactInstanceManager,
    private val hardwareBackBtnHandler: DefaultHardwareBackBtnHandler,
    private val lazyViewManagersEnabled: Boolean,
    private val minTimeLeftInFrameForNonBatchedOperationMs: Int
) : BaseReactPackage(), ReactPackageLogger {
  /**
   * This method is overridden, since OSS does not run the annotation processor to generate
   * [CoreModulesPackage.ReactModuleInfoProvider] class. Here we check if it exists with the method
   * [canLoadClassesFromAnnotationProcessors]. If it does not exist, we generate one manually in
   * [CoreModulesPackage.getReactModuleInfoByInitialization] and return that instead.
   */
  override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
    if (!ClassFinder.canLoadClassesFromAnnotationProcessors()) {
      return fallbackForMissingClass()
    }

    try {
      val reactModuleInfoProviderClass =
          ClassFinder.findClass("com.facebook.react.CoreModulesPackage\$\$ReactModuleInfoProvider")
      return reactModuleInfoProviderClass?.getDeclaredConstructor()?.newInstance()
          as ReactModuleInfoProvider
    } catch (e: ClassNotFoundException) {
      return fallbackForMissingClass()
    } catch (e: InstantiationException) {
      throw RuntimeException(
          "No ReactModuleInfoProvider for CoreModulesPackage$\$ReactModuleInfoProvider", e)
    } catch (e: IllegalAccessException) {
      throw RuntimeException(
          "No ReactModuleInfoProvider for CoreModulesPackage$\$ReactModuleInfoProvider", e)
    }
  }

  private fun fallbackForMissingClass(): ReactModuleInfoProvider {
    // In OSS case, the annotation processor does not run. We fall back on creating this byhand
    val moduleList: Array<Class<out NativeModule>> =
        arrayOf(
            AndroidInfoModule::class.java,
            DeviceEventManagerModule::class.java,
            DeviceInfoModule::class.java,
            DevMenuModule::class.java,
            DevSettingsModule::class.java,
            ExceptionsManagerModule::class.java,
            LogBoxModule::class.java,
            HeadlessJsTaskSupportModule::class.java,
            SourceCodeModule::class.java,
            TimingModule::class.java,
            UIManagerModule::class.java,
        )

    val reactModuleInfoMap: MutableMap<String, ReactModuleInfo> = HashMap<String, ReactModuleInfo>()
    for (moduleClass in moduleList) {
      val reactModule: ReactModule? =
          moduleClass.getAnnotation<ReactModule>(ReactModule::class.java)

      if (reactModule != null) {
        reactModuleInfoMap[reactModule.name] =
            ReactModuleInfo(
                reactModule.name,
                moduleClass.name,
                reactModule.canOverrideExistingModule,
                reactModule.needsEagerInit,
                reactModule.isCxxModule,
                ReactModuleInfo.classIsTurboModule(moduleClass))
      }
    }

    return ReactModuleInfoProvider { reactModuleInfoMap }
  }

  override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
    return when (name) {
      AndroidInfoModule.NAME -> AndroidInfoModule(reactContext)
      DeviceEventManagerModule.NAME ->
          DeviceEventManagerModule(reactContext, hardwareBackBtnHandler)
      DevMenuModule.NAME -> DevMenuModule(reactContext, reactInstanceManager.devSupportManager)
      DevSettingsModule.NAME ->
          DevSettingsModule(reactContext, reactInstanceManager.devSupportManager)
      ExceptionsManagerModule.NAME ->
          ExceptionsManagerModule(reactInstanceManager.devSupportManager)
      LogBoxModule.NAME -> LogBoxModule(reactContext, reactInstanceManager.devSupportManager)
      HeadlessJsTaskSupportModule.NAME -> HeadlessJsTaskSupportModule(reactContext)
      SourceCodeModule.NAME -> SourceCodeModule(reactContext)
      TimingModule.NAME -> TimingModule(reactContext, reactInstanceManager.devSupportManager)
      UIManagerModule.NAME -> createUIManager(reactContext)
      DeviceInfoModule.NAME -> DeviceInfoModule(reactContext)
      else ->
          throw IllegalArgumentException(
              "In CoreModulesPackage, could not find Native module for $name")
    }
  }

  private fun createUIManager(reactContext: ReactApplicationContext): UIManagerModule {
    ReactMarker.logMarker(ReactMarkerConstants.CREATE_UI_MANAGER_MODULE_START)
    Systrace.beginSection(Systrace.TRACE_TAG_REACT, "createUIManagerModule")

    try {
      if (lazyViewManagersEnabled) {
        val resolver: ViewManagerResolver =
            object : ViewManagerResolver {
              override fun getViewManager(viewManagerName: String): ViewManager<*, *>? {
                return reactInstanceManager.createViewManager(viewManagerName)
              }

              override fun getViewManagerNames(): Collection<String> {
                return reactInstanceManager.viewManagerNames
              }
            }

        return UIManagerModule(reactContext, resolver, minTimeLeftInFrameForNonBatchedOperationMs)
      } else {
        return UIManagerModule(
            reactContext,
            reactInstanceManager.getOrCreateViewManagers(reactContext),
            minTimeLeftInFrameForNonBatchedOperationMs)
      }
    } finally {
      Systrace.endSection(Systrace.TRACE_TAG_REACT)
      ReactMarker.logMarker(ReactMarkerConstants.CREATE_UI_MANAGER_MODULE_END)
    }
  }

  override fun startProcessPackage() {
    ReactMarker.logMarker(ReactMarkerConstants.PROCESS_CORE_REACT_PACKAGE_START)
  }

  override fun endProcessPackage() {
    ReactMarker.logMarker(ReactMarkerConstants.PROCESS_CORE_REACT_PACKAGE_END)
  }

  private companion object {
    init {
      LegacyArchitectureLogger.assertLegacyArchitecture(
          "CoreModulesPackage", LegacyArchitectureLogLevel.ERROR)
    }
  }
}

Выполнить команду


Для локальной разработки. Не используйте в интернете!