Enable ktfmt

Summary: Changelog: [internal]

Reviewed By: zertosh

Differential Revision: D30423755

fbshipit-source-id: 8ae27b3666214f5144ef8b5ef7fe868afc19b4b9
This commit is contained in:
Carmi Grushko
2021-08-19 06:16:37 -07:00
committed by Facebook GitHub Bot
parent b29a78732d
commit ec3a3df94f
6 changed files with 193 additions and 201 deletions
@@ -12,7 +12,8 @@ import org.gradle.api.Project
fun Project.configureDevPorts(androidExt: BaseExtension) {
val devServerPort = project.properties["reactNativeDevServerPort"]?.toString() ?: "8081"
val inspectorProxyPort = project.properties["reactNativeInspectorProxyPort"]?.toString() ?: devServerPort
val inspectorProxyPort =
project.properties["reactNativeInspectorProxyPort"]?.toString() ?: devServerPort
androidExt.buildTypes.all {
resValue("integer", "react_native_dev_server_port", devServerPort)
@@ -8,9 +8,9 @@
package com.facebook.react
import com.android.build.gradle.api.BaseVariant
import java.io.File
import org.apache.tools.ant.taskdefs.condition.Os
import org.gradle.api.Project
import java.io.File
open class ReactAppExtension(private val project: Project) {
var composeSourceMapsPath: String = "node_modules/react-native/scripts/compose-source-maps.js"
@@ -39,36 +39,38 @@ open class ReactAppExtension(private val project: Project) {
get() = detectEntryFile(entryFile = entryFile, reactRoot = reactRoot)
internal val detectedCliPath: String
get() = detectCliPath(
projectDir = project.projectDir,
reactRoot = reactRoot,
preconfuredCliPath = cliPath
)
get() =
detectCliPath(
projectDir = project.projectDir, reactRoot = reactRoot, preconfuredCliPath = cliPath)
internal val osAwareHermesCommand: String
get() = getOSAwareHermesCommand(hermesCommand)
private fun detectEntryFile(entryFile: File?, reactRoot: File): File = when {
System.getenv("ENTRY_FILE") != null -> File(System.getenv("ENTRY_FILE"))
entryFile != null -> entryFile
File(reactRoot, "index.android.js").exists() -> File(reactRoot, "index.android.js")
else -> File(reactRoot, "index.android.js")
}
private fun detectEntryFile(entryFile: File?, reactRoot: File): File =
when {
System.getenv("ENTRY_FILE") != null -> File(System.getenv("ENTRY_FILE"))
entryFile != null -> entryFile
File(reactRoot, "index.android.js").exists() -> File(reactRoot, "index.android.js")
else -> File(reactRoot, "index.android.js")
}
private fun detectCliPath(projectDir: File, reactRoot: File, preconfuredCliPath: String?): String {
private fun detectCliPath(
projectDir: File,
reactRoot: File,
preconfuredCliPath: String?
): String {
// 1. preconfigured path
if (preconfuredCliPath != null) return preconfuredCliPath
// 2. node module path
val nodeProcess = Runtime.getRuntime().exec(
arrayOf("node", "-e", "console.log(require('react-native/cli').bin);"),
emptyArray(),
projectDir
)
val nodeProcess =
Runtime.getRuntime()
.exec(
arrayOf("node", "-e", "console.log(require('react-native/cli').bin);"),
emptyArray(),
projectDir)
val nodeProcessOutput = nodeProcess.inputStream.use {
it.bufferedReader().readText().trim()
}
val nodeProcessOutput = nodeProcess.inputStream.use { it.bufferedReader().readText().trim() }
if (nodeProcessOutput.isNotEmpty()) {
return nodeProcessOutput
@@ -80,8 +82,9 @@ open class ReactAppExtension(private val project: Project) {
return rootCliJs.absolutePath
}
error("Couldn't determine CLI location. " +
"Please set `project.react.cliPath` to the path of the react-native cli.js")
error(
"Couldn't determine CLI location. " +
"Please set `project.react.cliPath` to the path of the react-native cli.js")
}
// Make sure not to inspect the Hermes config unless we need it,
@@ -93,16 +96,15 @@ open class ReactAppExtension(private val project: Project) {
}
// Execution on Windows fails with / as separator
return hermesCommand
.replace("%OS-BIN%", getHermesOSBin())
.replace('/', File.separatorChar)
return hermesCommand.replace("%OS-BIN%", getHermesOSBin()).replace('/', File.separatorChar)
}
private fun getHermesOSBin(): String {
if (Os.isFamily(Os.FAMILY_WINDOWS)) return "win64-bin"
if (Os.isFamily(Os.FAMILY_MAC)) return "osx-bin"
if (Os.isOs(null, "linux", "amd64", null)) return "linux64-bin"
error("OS not recognized. Please set project.react.hermesCommand " +
"to the path of a working Hermes compiler.")
error(
"OS not recognized. Please set project.react.hermesCommand " +
"to the path of a working Hermes compiler.")
}
}
@@ -24,17 +24,13 @@ class ReactAppPlugin : Plugin<Project> {
configureDevPorts(androidConfiguration)
val isAndroidLibrary = plugins.hasPlugin("com.android.library")
val variants = if (isAndroidLibrary) {
extensions.getByType<LibraryExtension>().libraryVariants
} else {
extensions.getByType<AppExtension>().applicationVariants
}
variants.all {
configureReactTasks(
variant = this,
config = config
)
}
val variants =
if (isAndroidLibrary) {
extensions.getByType<LibraryExtension>().libraryVariants
} else {
extensions.getByType<AppExtension>().applicationVariants
}
variants.all { configureReactTasks(variant = this, config = config) }
}
}
}
@@ -13,11 +13,11 @@ import com.android.build.gradle.api.LibraryVariant
import com.android.build.gradle.internal.tasks.factory.dependsOn
import com.facebook.react.tasks.BundleJsAndAssetsTask
import com.facebook.react.tasks.HermesBinaryTask
import java.io.File
import org.gradle.api.Project
import org.gradle.api.tasks.Copy
import org.gradle.kotlin.dsl.extra
import org.gradle.kotlin.dsl.register
import java.io.File
private const val REACT_GROUP = "react"
@@ -34,8 +34,10 @@ internal fun Project.configureReactTasks(variant: BaseVariant, config: ReactAppE
val jsBundleFile = File(jsBundleDir, config.bundleAssetName)
val jsSourceMapsDir = File(buildDir, "generated/sourcemaps/react/$targetPath")
val jsIntermediateSourceMapsDir = File(buildDir, "intermediates/sourcemaps/react/$targetPath")
val jsPackagerSourceMapFile = File(jsIntermediateSourceMapsDir, "${config.bundleAssetName}.packager.map")
val jsCompilerSourceMapFile = File(jsIntermediateSourceMapsDir, "${config.bundleAssetName}.compiler.map")
val jsPackagerSourceMapFile =
File(jsIntermediateSourceMapsDir, "${config.bundleAssetName}.packager.map")
val jsCompilerSourceMapFile =
File(jsIntermediateSourceMapsDir, "${config.bundleAssetName}.compiler.map")
val jsOutputSourceMapFile = File(jsSourceMapsDir, "${config.bundleAssetName}.map")
// Additional node and packager commandline arguments
@@ -46,88 +48,90 @@ internal fun Project.configureReactTasks(variant: BaseVariant, config: ReactAppE
val enableHermes = config.enableHermesForVariant(variant)
val bundleEnabled = variant.checkBundleEnabled(config)
val bundleTask = tasks.register<BundleJsAndAssetsTask>("createBundle${targetName}JsAndAssets") {
val task = this
task.group = REACT_GROUP
task.description = "create JS bundle and assets for $targetName."
val bundleTask =
tasks.register<BundleJsAndAssetsTask>("createBundle${targetName}JsAndAssets") {
val task = this
task.group = REACT_GROUP
task.description = "create JS bundle and assets for $targetName."
task.reactRoot = config.reactRoot
task.sources = fileTree(config.reactRoot) {
setExcludes(config.inputExcludes)
}
task.execCommand = execCommand
task.bundleCommand = config.bundleCommand
task.devEnabled = !(variant.name in config.devDisabledInVariants || isRelease)
task.entryFile = config.detectedEntryFile
task.reactRoot = config.reactRoot
task.sources = fileTree(config.reactRoot) { setExcludes(config.inputExcludes) }
task.execCommand = execCommand
task.bundleCommand = config.bundleCommand
task.devEnabled = !(variant.name in config.devDisabledInVariants || isRelease)
task.entryFile = config.detectedEntryFile
val extraArgs = mutableListOf<String>()
val extraArgs = mutableListOf<String>()
if (config.bundleConfig != null) {
extraArgs.add("--config")
extraArgs.add(config.bundleConfig.orEmpty())
}
if (config.bundleConfig != null) {
extraArgs.add("--config")
extraArgs.add(config.bundleConfig.orEmpty())
}
// Hermes doesn't require JS minification.
if (enableHermes && !devEnabled) {
extraArgs.add("--minify")
extraArgs.add("false")
}
// Hermes doesn't require JS minification.
if (enableHermes && !devEnabled) {
extraArgs.add("--minify")
extraArgs.add("false")
}
extraArgs.addAll(config.extraPackagerArgs)
extraArgs.addAll(config.extraPackagerArgs)
task.extraArgs = emptyList()
task.extraArgs = emptyList()
task.jsBundleDir = jsBundleDir
task.jsBundleFile = jsBundleFile
task.resourcesDir = resourcesDir
task.jsIntermediateSourceMapsDir = jsIntermediateSourceMapsDir
task.jsSourceMapsDir = jsSourceMapsDir
task.jsSourceMapsFile = if (enableHermes) jsPackagerSourceMapFile else jsOutputSourceMapFile
task.jsBundleDir = jsBundleDir
task.jsBundleFile = jsBundleFile
task.resourcesDir = resourcesDir
task.jsIntermediateSourceMapsDir = jsIntermediateSourceMapsDir
task.jsSourceMapsDir = jsSourceMapsDir
task.jsSourceMapsFile = if (enableHermes) jsPackagerSourceMapFile else jsOutputSourceMapFile
task.enabled = bundleEnabled
}
task.enabled = bundleEnabled
}
val hermesTask = tasks.register<HermesBinaryTask>("emit${targetName}HermesResources") {
val task = this
task.group = REACT_GROUP
task.description = "bundle hermes resources for $targetName"
val hermesTask =
tasks.register<HermesBinaryTask>("emit${targetName}HermesResources") {
val task = this
task.group = REACT_GROUP
task.description = "bundle hermes resources for $targetName"
task.reactRoot = config.reactRoot
task.hermesCommand = config.osAwareHermesCommand
task.hermesFlags = if (isRelease) config.hermesFlagsRelease else config.hermesFlagsDebug
task.jsBundleFile = jsBundleFile
task.composeSourceMapsCommand = nodeExecutableAndArgs + config.composeSourceMapsPath
task.jsPackagerSourceMapFile = jsPackagerSourceMapFile
task.jsCompilerSourceMapFile = jsCompilerSourceMapFile
task.jsOutputSourceMapFile = jsOutputSourceMapFile
task.reactRoot = config.reactRoot
task.hermesCommand = config.osAwareHermesCommand
task.hermesFlags = if (isRelease) config.hermesFlagsRelease else config.hermesFlagsDebug
task.jsBundleFile = jsBundleFile
task.composeSourceMapsCommand = nodeExecutableAndArgs + config.composeSourceMapsPath
task.jsPackagerSourceMapFile = jsPackagerSourceMapFile
task.jsCompilerSourceMapFile = jsCompilerSourceMapFile
task.jsOutputSourceMapFile = jsOutputSourceMapFile
task.dependsOn(bundleTask)
task.dependsOn(bundleTask)
task.enabled = bundleEnabled && enableHermes
}
task.enabled = bundleEnabled && enableHermes
}
val aggregatedBundleTask = tasks.register("bundle${targetName}JsAndAssets") {
val task = this
task.group = REACT_GROUP
task.description = "bundle JS and resources for $targetName"
val aggregatedBundleTask =
tasks.register("bundle${targetName}JsAndAssets") {
val task = this
task.group = REACT_GROUP
task.description = "bundle JS and resources for $targetName"
task.dependsOn(bundleTask, hermesTask)
task.dependsOn(bundleTask, hermesTask)
// this was exposed before, do we still need it?
task.extra["generatedResFolders"] = files(resourcesDir).builtBy(task)
task.extra["generatedAssetsFolders"] = files(jsBundleDir).builtBy(task)
}
// this was exposed before, do we still need it?
task.extra["generatedResFolders"] = files(resourcesDir).builtBy(task)
task.extra["generatedAssetsFolders"] = files(jsBundleDir).builtBy(task)
}
val generatedResFolders = files(resourcesDir).builtBy(aggregatedBundleTask)
// Android configuration
variant.registerGeneratedResFolders(generatedResFolders)
val packageTask = when (variant) {
is ApplicationVariant -> variant.packageApplicationProvider
is LibraryVariant -> variant.packageLibraryProvider
else -> tasks.named("package$targetName")
}
val packageTask =
when (variant) {
is ApplicationVariant -> variant.packageApplicationProvider
is LibraryVariant -> variant.packageLibraryProvider
else -> tasks.named("package$targetName")
}
val mergeResourcesTask = variant.mergeResourcesProvider
val mergeAssetsTask = variant.mergeAssetsProvider
@@ -135,17 +139,18 @@ internal fun Project.configureReactTasks(variant: BaseVariant, config: ReactAppE
val resourcesDirConfigValue = config.resourcesDir[variant.name]
if (resourcesDirConfigValue != null) {
val currentCopyResTask = tasks.register<Copy>("copy${targetName}BundledResources") {
group = "react"
description = "copy bundled resources into custom location for $targetName."
val currentCopyResTask =
tasks.register<Copy>("copy${targetName}BundledResources") {
group = "react"
description = "copy bundled resources into custom location for $targetName."
from(resourcesDir)
into(file(resourcesDirConfigValue))
from(resourcesDir)
into(file(resourcesDirConfigValue))
dependsOn(bundleTask)
dependsOn(bundleTask)
enabled = bundleEnabled
}
enabled = bundleEnabled
}
packageTask.dependsOn(currentCopyResTask)
preBundleTask.dependsOn(currentCopyResTask)
@@ -153,31 +158,31 @@ internal fun Project.configureReactTasks(variant: BaseVariant, config: ReactAppE
packageTask.configure {
if (config.enableVmCleanup) {
doFirst {
cleanupVMFiles(enableHermes, isRelease, targetPath)
doFirst { cleanupVMFiles(enableHermes, isRelease, targetPath) }
}
}
val currentAssetsCopyTask =
tasks.register<Copy>("copy${targetName}BundledJs") {
group = "react"
description = "copy bundled JS into $targetName."
from(jsBundleDir)
val jsBundleDirConfigValue = config.jsBundleDir[targetName]
if (jsBundleDirConfigValue != null) {
into(jsBundleDirConfigValue)
} else {
into(mergeAssetsTask.map { it.outputDir.get() })
}
dependsOn(mergeAssetsTask)
enabled = bundleEnabled
}
}
}
val currentAssetsCopyTask = tasks.register<Copy>("copy${targetName}BundledJs") {
group = "react"
description = "copy bundled JS into $targetName."
from(jsBundleDir)
val jsBundleDirConfigValue = config.jsBundleDir[targetName]
if (jsBundleDirConfigValue != null) {
into(jsBundleDirConfigValue)
} else {
into(mergeAssetsTask.map { it.outputDir.get() })
}
dependsOn(mergeAssetsTask)
enabled = bundleEnabled
}
// mergeResources task runs before the bundle file is copied to the intermediate asset directory from Android plugin 4.1+.
// mergeResources task runs before the bundle file is copied to the intermediate asset directory
// from Android plugin 4.1+.
// This ensures to copy the bundle file before mergeResources task starts
mergeResourcesTask.dependsOn(currentAssetsCopyTask)
packageTask.dependsOn(currentAssetsCopyTask)
@@ -210,13 +215,14 @@ private fun Project.cleanupVMFiles(enableHermes: Boolean, isRelease: Boolean, ta
// For JSC, delete all the libhermes* files
include("**/libhermes*.so")
}
}.visit {
val targetVariant = ".*/transforms/[^/]*/$targetPath/.*".toRegex()
val path = file.absolutePath.replace(File.separatorChar, '/')
if (path.matches(targetVariant) && file.isFile()) {
file.delete()
}
}
.visit {
val targetVariant = ".*/transforms/[^/]*/$targetPath/.*".toRegex()
val path = file.absolutePath.replace(File.separatorChar, '/')
if (path.matches(targetVariant) && file.isFile()) {
file.delete()
}
}
}
private fun BaseVariant.checkBundleEnabled(config: ReactAppExtension): Boolean {
@@ -7,6 +7,7 @@
package com.facebook.react.tasks
import java.io.File
import org.gradle.api.DefaultTask
import org.gradle.api.file.FileTree
import org.gradle.api.tasks.Input
@@ -14,7 +15,6 @@ import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction
import java.io.File
open class BundleJsAndAssetsTask : DefaultTask() {
internal lateinit var reactRoot: File
@@ -22,29 +22,18 @@ open class BundleJsAndAssetsTask : DefaultTask() {
@get:InputFiles
@Suppress("UNUSED") // used to invalidate caches
internal lateinit var sources: FileTree
@get:Input
internal lateinit var execCommand: List<String>
@get:Input
internal lateinit var bundleCommand: String
@get:Input
internal var devEnabled: Boolean = true
@get:Input
internal lateinit var entryFile: File
@get:Input
internal var extraArgs: List<String> = emptyList()
@get:Input internal lateinit var execCommand: List<String>
@get:Input internal lateinit var bundleCommand: String
@get:Input internal var devEnabled: Boolean = true
@get:Input internal lateinit var entryFile: File
@get:Input internal var extraArgs: List<String> = emptyList()
@get:OutputDirectory
internal lateinit var jsBundleDir: File
@get:OutputFile
internal lateinit var jsBundleFile: File
@get:OutputDirectory
internal lateinit var resourcesDir: File
@get:OutputDirectory
internal lateinit var jsIntermediateSourceMapsDir: File
@get:OutputDirectory
internal lateinit var jsSourceMapsDir: File
@get:OutputFile
internal lateinit var jsSourceMapsFile: File
@get:OutputDirectory internal lateinit var jsBundleDir: File
@get:OutputFile internal lateinit var jsBundleFile: File
@get:OutputDirectory internal lateinit var resourcesDir: File
@get:OutputDirectory internal lateinit var jsIntermediateSourceMapsDir: File
@get:OutputDirectory internal lateinit var jsSourceMapsDir: File
@get:OutputFile internal lateinit var jsSourceMapsFile: File
@TaskAction
fun run() {
@@ -65,17 +54,22 @@ open class BundleJsAndAssetsTask : DefaultTask() {
@Suppress("SpreadOperator")
windowsAwareCommandLine(
*execCommand.toTypedArray(),
bundleCommand,
"--platform", "android",
"--dev", devEnabled,
"--reset-cache",
"--entry-file", entryFile,
"--bundle-output", jsBundleFile,
"--assets-dest", resourcesDir,
"--sourcemap-output", jsSourceMapsFile,
*extraArgs.toTypedArray()
)
*execCommand.toTypedArray(),
bundleCommand,
"--platform",
"android",
"--dev",
devEnabled,
"--reset-cache",
"--entry-file",
entryFile,
"--bundle-output",
jsBundleFile,
"--assets-dest",
resourcesDir,
"--sourcemap-output",
jsSourceMapsFile,
*extraArgs.toTypedArray())
}
}
@@ -7,32 +7,25 @@
package com.facebook.react.tasks
import java.io.File
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction
import java.io.File
open class HermesBinaryTask : DefaultTask() {
internal lateinit var reactRoot: File
@get:Input
internal lateinit var hermesCommand: String
@get:Input
internal var hermesFlags: List<String> = emptyList()
@get:InputFile
internal lateinit var jsBundleFile: File
@get:Input internal lateinit var hermesCommand: String
@get:Input internal var hermesFlags: List<String> = emptyList()
@get:InputFile internal lateinit var jsBundleFile: File
@get:Input
internal lateinit var composeSourceMapsCommand: List<String>
@get:Input
internal lateinit var jsPackagerSourceMapFile: File
@get:Input internal lateinit var composeSourceMapsCommand: List<String>
@get:Input internal lateinit var jsPackagerSourceMapFile: File
@get:OutputFile
internal lateinit var jsCompilerSourceMapFile: File
@get:OutputFile
internal lateinit var jsOutputSourceMapFile: File
@get:OutputFile internal lateinit var jsCompilerSourceMapFile: File
@get:OutputFile internal lateinit var jsOutputSourceMapFile: File
@TaskAction
fun run() {
@@ -51,12 +44,12 @@ open class HermesBinaryTask : DefaultTask() {
project.exec {
@Suppress("SpreadOperator")
windowsAwareCommandLine(
hermesCommand,
"-emit-binary",
"-out", outputFile,
jsBundleFile,
*hermesFlags.toTypedArray()
)
hermesCommand,
"-emit-binary",
"-out",
outputFile,
jsBundleFile,
*hermesFlags.toTypedArray())
}
}
@@ -66,11 +59,11 @@ open class HermesBinaryTask : DefaultTask() {
@Suppress("SpreadOperator")
windowsAwareCommandLine(
*composeSourceMapsCommand.toTypedArray(),
jsPackagerSourceMapFile,
jsCompilerSourceMapFile,
"-o", jsOutputSourceMapFile
)
*composeSourceMapsCommand.toTypedArray(),
jsPackagerSourceMapFile,
jsCompilerSourceMapFile,
"-o",
jsOutputSourceMapFile)
}
}