Skip to content

Commit

Permalink
RNGP - Do not access .project inside GenerateCodegenArtifactsTask (fa…
Browse files Browse the repository at this point in the history
…cebook#49400)

Summary:

We should not invoke anything on the `project` property inside thet task.
That will break Gradle Configuration Caching which is becoming the default in the next version of Gradle.

This fixes it for the `GenerateCodegenArtifactsTask` task.

Changelog:
[Internal] [Changed] -

Differential Revision: D69592464
  • Loading branch information
cortinico authored and facebook-github-bot committed Feb 13, 2025
1 parent 953ae78 commit 76c4b13
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -176,14 +176,16 @@ class ReactPlugin : Plugin<Project> {
// We create the task to generate Java code from schema.
val generateCodegenArtifactsTask =
project.tasks.register(
"generateCodegenArtifactsFromSchema", GenerateCodegenArtifactsTask::class.java) {
it.dependsOn(generateCodegenSchemaTask)
it.reactNativeDir.set(rootExtension.reactNativeDir)
it.nodeExecutableAndArgs.set(rootExtension.nodeExecutableAndArgs)
it.generatedSrcDir.set(generatedSrcDir)
it.packageJsonFile.set(findPackageJsonFile(project, rootExtension.root))
it.codegenJavaPackageName.set(localExtension.codegenJavaPackageName)
it.libraryName.set(localExtension.libraryName)
"generateCodegenArtifactsFromSchema", GenerateCodegenArtifactsTask::class.java) { task
->
task.dependsOn(generateCodegenSchemaTask)
task.reactNativeDir.set(rootExtension.reactNativeDir)
task.nodeExecutableAndArgs.set(rootExtension.nodeExecutableAndArgs)
task.generatedSrcDir.set(generatedSrcDir)
task.packageJsonFile.set(findPackageJsonFile(project, rootExtension.root))
task.codegenJavaPackageName.set(localExtension.codegenJavaPackageName)
task.libraryName.set(localExtension.libraryName)
task.nodeWorkingDir.set(project.layout.projectDirectory.asFile.absolutePath)

// Please note that appNeedsCodegen is triggering a read of the package.json at
// configuration time as we need to feed the onlyIf condition of this task.
Expand All @@ -194,7 +196,7 @@ class ReactPlugin : Plugin<Project> {
val parsedPackageJson = packageJson?.let { JsonUtils.fromPackageJson(it) }
val includesGeneratedCode =
parsedPackageJson?.codegenConfig?.includesGeneratedCode ?: false
it.onlyIf { (isLibrary || needsCodegenFromPackageJson) && !includesGeneratedCode }
task.onlyIf { (isLibrary || needsCodegenFromPackageJson) && !includesGeneratedCode }
}

// We update the android configuration to include the generated sources.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ package com.facebook.react.tasks
import com.facebook.react.utils.JsonUtils
import com.facebook.react.utils.Os.cliPath
import com.facebook.react.utils.windowsAwareCommandLine
import java.io.File
import org.gradle.api.file.Directory
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFile
Expand All @@ -31,6 +32,8 @@ abstract class GenerateCodegenArtifactsTask : Exec() {

@get:InputFile abstract val packageJsonFile: RegularFileProperty

@get:Input abstract val nodeWorkingDir: Property<String>

@get:Input abstract val nodeExecutableAndArgs: ListProperty<String>

@get:Input abstract val codegenJavaPackageName: Property<String>
Expand Down Expand Up @@ -64,7 +67,7 @@ abstract class GenerateCodegenArtifactsTask : Exec() {
}

internal fun setupCommandLine(libraryName: String, codegenJavaPackageName: String) {
val workingDir = project.projectDir
val workingDir = File(nodeWorkingDir.get())
commandLine(
windowsAwareCommandLine(
*nodeExecutableAndArgs.get().toTypedArray(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,11 @@ class GenerateCodegenArtifactsTaskTest {
val outputDir = tempFolder.newFolder("output")

val task =
createTestTask<GenerateCodegenArtifactsTask> {
it.reactNativeDir.set(reactNativeDir)
it.generatedSrcDir.set(outputDir)
it.nodeExecutableAndArgs.set(listOf("--verbose"))
createTestTask<GenerateCodegenArtifactsTask> { task ->
task.reactNativeDir.set(reactNativeDir)
task.generatedSrcDir.set(outputDir)
task.nodeExecutableAndArgs.set(listOf("--verbose"))
task.nodeWorkingDir.set(tempFolder.root.absolutePath)
}

task.setupCommandLine("example-test", "com.example.test")
Expand Down Expand Up @@ -100,10 +101,11 @@ class GenerateCodegenArtifactsTaskTest {

val project = createProject()
val task =
createTestTask<GenerateCodegenArtifactsTask>(project) {
it.reactNativeDir.set(reactNativeDir)
it.generatedSrcDir.set(outputDir)
it.nodeExecutableAndArgs.set(listOf("--verbose"))
createTestTask<GenerateCodegenArtifactsTask>(project) { task ->
task.reactNativeDir.set(reactNativeDir)
task.generatedSrcDir.set(outputDir)
task.nodeExecutableAndArgs.set(listOf("--verbose"))
task.nodeWorkingDir.set(project.projectDir.absolutePath)
}

task.setupCommandLine("example-test", "com.example.test")
Expand Down

0 comments on commit 76c4b13

Please # to comment.