PHP WebShell

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

Просмотр файла: LazyReactPackage.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.ModuleHolder
import com.facebook.react.bridge.ModuleSpec
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.annotations.internal.LegacyArchitecture
import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel
import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger
import com.facebook.react.module.model.ReactModuleInfo
import com.facebook.react.module.model.ReactModuleInfoProvider
import com.facebook.react.uimanager.ViewManager
import com.facebook.systrace.Systrace.TRACE_TAG_REACT
import com.facebook.systrace.SystraceMessage

/** React package supporting lazy creation of native modules. */
@Deprecated("This class is deprecated, please use BaseReactPackage instead.")
@LegacyArchitecture(logLevel = LegacyArchitectureLogLevel.ERROR)
public abstract class LazyReactPackage : ReactPackage {
  /**
   * We return an iterable
   *
   * @param reactContext context
   * @return An [Iterable]<[ModuleHolder]> that contains all native modules registered for the
   *   context
   */
  public fun getNativeModuleIterator(
      reactContext: ReactApplicationContext
  ): Iterable<ModuleHolder> {
    val reactModuleInfoMap: Map<String, ReactModuleInfo> =
        reactModuleInfoProvider.getReactModuleInfos()
    val nativeModules = getNativeModules(reactContext)

    return object : Iterable<ModuleHolder> {
      override fun iterator(): Iterator<ModuleHolder> {
        var position = 0

        return object : Iterator<ModuleHolder> {
          override fun hasNext(): Boolean = position < nativeModules.size

          override fun next(): ModuleHolder {
            val moduleSpec = nativeModules[position++]
            val name = moduleSpec.name
            val reactModuleInfo = reactModuleInfoMap[name]

            return if (reactModuleInfo == null) {
              val module: NativeModule
              ReactMarker.logMarker(
                  ReactMarkerConstants.CREATE_MODULE_START,
                  name,
              )
              try {
                module = moduleSpec.provider.get()
              } finally {
                ReactMarker.logMarker(ReactMarkerConstants.CREATE_MODULE_END)
              }
              ModuleHolder(module)
            } else {
              ModuleHolder(reactModuleInfo, moduleSpec.provider)
            }
          }
        }
      }
    }
  }

  /**
   * @param reactContext react application context that can be used to create modules
   * @return list of module specs that can create the native modules
   */
  protected abstract fun getNativeModules(reactContext: ReactApplicationContext): List<ModuleSpec>

  /**
   * Internal accessor to [getNativeModules]. This is needed because [getNativeModules] was
   * originally protected in Java (which had subclass + package visibility) and is now protected in
   * Kotlin (which has only subclass visiblity). We add this accessor to prevent making
   * [getNativeModules] public
   */
  internal fun internal_getNativeModules(reactContext: ReactApplicationContext): List<ModuleSpec> =
      getNativeModules(reactContext)

  /**
   * @param reactContext react application context that can be used to create modules
   * @return A [List]<[NativeModule]> to register
   */
  @Suppress("DEPRECATION")
  @Deprecated("Migrate to [BaseReactPackage] and implement [getModule] instead.")
  override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> =
      buildList {
        for (holder in getNativeModules(reactContext)) {
          val nativeModule: NativeModule
          SystraceMessage.beginSection(TRACE_TAG_REACT, "createNativeModule").flush()
          ReactMarker.logMarker(ReactMarkerConstants.CREATE_MODULE_START, holder.name)
          try {
            nativeModule = holder.provider.get()
          } finally {
            ReactMarker.logMarker(ReactMarkerConstants.CREATE_MODULE_END)
            SystraceMessage.endSection(TRACE_TAG_REACT).flush()
          }
          add(nativeModule)
        }
      }

  /**
   * @param reactContext react application context that can be used to create View Managers.
   * @return list of module specs that can create the View Managers.
   */
  public open fun getViewManagers(reactContext: ReactApplicationContext): List<ModuleSpec> =
      emptyList()

  override fun createViewManagers(
      reactContext: ReactApplicationContext
  ): List<ViewManager<in Nothing, in Nothing>> {
    val viewManagerModuleSpecs = getViewManagers(reactContext)
    if (viewManagerModuleSpecs.isEmpty()) {
      return emptyList()
    }

    val viewManagers: List<ViewManager<in Nothing, in Nothing>> = buildList {
      for (moduleSpec in viewManagerModuleSpecs) {
        add(moduleSpec.provider.get() as ViewManager<in Nothing, in Nothing>)
      }
    }
    return viewManagers
  }

  public abstract val reactModuleInfoProvider: ReactModuleInfoProvider

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

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


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