mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Fix GenerateCodegenArtifactsTask calling two generators with Java enabled
Summary: This diff fixes a bug with `GenerateCodegenArtifactsTask` that was causing two generators to be called one after the other (first the JS and then the Java one). Now they're mutually exclusive. Changelog: [Internal] [Changed] - Fix GenerateCodegenArtifactsTask calling two generators with Java enabled Reviewed By: ShikaSD Differential Revision: D31169379 fbshipit-source-id: 668d8e440ad6b3f06654f29c5cbc344ef82c4b9c
This commit is contained in:
committed by
Facebook GitHub Bot
parent
6d367d70f2
commit
5b8da02296
+1
-1
@@ -30,7 +30,7 @@ import java.util.stream.Collectors;
|
||||
* generator is isolated to a single schema, and a single Java package output.
|
||||
*/
|
||||
public final class JavaGenerator {
|
||||
public static String LICENSE_HEADER =
|
||||
public static final String LICENSE_HEADER =
|
||||
"/*\n"
|
||||
+ " * Copyright (c) Facebook, Inc. and its affiliates.\n"
|
||||
+ " *\n"
|
||||
|
||||
-1
@@ -76,7 +76,6 @@ class ReactAppPlugin : Plugin<Project> {
|
||||
"generateCodegenArtifactsFromSchema", GenerateCodegenArtifactsTask::class.java) {
|
||||
it.dependsOn(generateCodegenSchemaTask)
|
||||
it.reactRoot.set(extension.reactRoot)
|
||||
it.jsRootDir.set(extension.jsRootDir)
|
||||
it.nodeExecutableAndArgs.set(extension.nodeExecutableAndArgs)
|
||||
it.codegenDir.set(extension.codegenDir)
|
||||
it.useJavaGenerator.set(extension.useJavaGenerator)
|
||||
|
||||
+14
-11
@@ -22,8 +22,6 @@ abstract class GenerateCodegenArtifactsTask : Exec() {
|
||||
|
||||
@get:Internal abstract val reactRoot: DirectoryProperty
|
||||
|
||||
@get:Internal abstract val jsRootDir: DirectoryProperty
|
||||
|
||||
@get:Internal abstract val codegenDir: DirectoryProperty
|
||||
|
||||
@get:Internal abstract val generatedSrcDir: DirectoryProperty
|
||||
@@ -48,17 +46,11 @@ abstract class GenerateCodegenArtifactsTask : Exec() {
|
||||
@get:OutputDirectory val generatedJniFiles: Provider<Directory> = generatedSrcDir.dir("jni")
|
||||
|
||||
override fun exec() {
|
||||
commandLine(
|
||||
windowsAwareYarn(
|
||||
*nodeExecutableAndArgs.get().toTypedArray(),
|
||||
reactRoot.file("scripts/generate-specs-cli.js").get().asFile.absolutePath,
|
||||
"android",
|
||||
generatedSchemaFile.get().asFile.absolutePath,
|
||||
generatedSrcDir.get().asFile.absolutePath,
|
||||
libraryName.get(),
|
||||
codegenJavaPackageName.get()))
|
||||
setupCommandLine()
|
||||
super.exec()
|
||||
}
|
||||
|
||||
internal fun setupCommandLine() {
|
||||
if (useJavaGenerator.getOrElse(false)) {
|
||||
// Use Java-based generator implementation to produce the source files,
|
||||
// instead of using the JS-based generator.
|
||||
@@ -71,6 +63,17 @@ abstract class GenerateCodegenArtifactsTask : Exec() {
|
||||
} catch (e: Exception) {
|
||||
throw GradleException("Failed to generate Java from schema.", e)
|
||||
}
|
||||
commandLine("echo", "Used JavaGenerator to generate files instead of generate-specs-cli.js")
|
||||
} else {
|
||||
commandLine(
|
||||
windowsAwareYarn(
|
||||
*nodeExecutableAndArgs.get().toTypedArray(),
|
||||
reactRoot.file("scripts/generate-specs-cli.js").get().asFile.absolutePath,
|
||||
"android",
|
||||
generatedSchemaFile.get().asFile.absolutePath,
|
||||
generatedSrcDir.get().asFile.absolutePath,
|
||||
libraryName.get(),
|
||||
codegenJavaPackageName.get()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+111
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its 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.tasks
|
||||
|
||||
import com.facebook.react.tests.OS
|
||||
import com.facebook.react.tests.OsRule
|
||||
import com.facebook.react.tests.WithOs
|
||||
import com.facebook.react.tests.createTestTask
|
||||
import java.io.File
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.rules.TemporaryFolder
|
||||
|
||||
class GenerateCodegenArtifactsTaskTest {
|
||||
|
||||
@get:Rule val tempFolder = TemporaryFolder()
|
||||
|
||||
@get:Rule val osRule = OsRule()
|
||||
|
||||
@Test
|
||||
fun generateCodegenSchema_inputFiles_areSetCorrectly() {
|
||||
val codegenDir = tempFolder.newFolder("codegen")
|
||||
val outputDir = tempFolder.newFolder("output")
|
||||
|
||||
val task =
|
||||
createTestTask<GenerateCodegenArtifactsTask> {
|
||||
it.codegenDir.set(codegenDir)
|
||||
it.generatedSrcDir.set(outputDir)
|
||||
}
|
||||
|
||||
assertEquals(
|
||||
File(codegenDir, "lib/cli/combine/combine-js-to-schema-cli.js"),
|
||||
task.combineJsToSchemaCli.get().asFile)
|
||||
assertEquals(File(outputDir, "schema.json"), task.generatedSchemaFile.get().asFile)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun generateCodegenSchema_outputFile_isSetCorrectly() {
|
||||
val codegenDir = tempFolder.newFolder("codegen")
|
||||
val outputDir = tempFolder.newFolder("output")
|
||||
|
||||
val task =
|
||||
createTestTask<GenerateCodegenArtifactsTask> {
|
||||
it.codegenDir.set(codegenDir)
|
||||
it.generatedSrcDir.set(outputDir)
|
||||
}
|
||||
|
||||
assertEquals(File(outputDir, "java"), task.generatedJavaFiles.get().asFile)
|
||||
assertEquals(File(outputDir, "jni"), task.generatedJniFiles.get().asFile)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun generateCodegenSchema_simpleProperties_areInsideInput() {
|
||||
val task =
|
||||
createTestTask<GenerateCodegenArtifactsTask> {
|
||||
it.nodeExecutableAndArgs.set(listOf("npm", "help"))
|
||||
it.useJavaGenerator.set(true)
|
||||
it.codegenJavaPackageName.set("com.example.test")
|
||||
it.libraryName.set("example-test")
|
||||
}
|
||||
|
||||
assertEquals(listOf("npm", "help"), task.nodeExecutableAndArgs.get())
|
||||
assertEquals(true, task.useJavaGenerator.get())
|
||||
assertEquals("com.example.test", task.codegenJavaPackageName.get())
|
||||
assertEquals("example-test", task.libraryName.get())
|
||||
assertTrue(task.inputs.properties.containsKey("nodeExecutableAndArgs"))
|
||||
assertTrue(task.inputs.properties.containsKey("useJavaGenerator"))
|
||||
assertTrue(task.inputs.properties.containsKey("codegenJavaPackageName"))
|
||||
assertTrue(task.inputs.properties.containsKey("libraryName"))
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithOs(OS.UNIX)
|
||||
fun setupCommandLine_withoutJavaGenerator_willSetupCorrectly() {
|
||||
val reactRoot = tempFolder.newFolder("node_modules/react-native/")
|
||||
val codegenDir = tempFolder.newFolder("codegen")
|
||||
val outputDir = tempFolder.newFolder("output")
|
||||
|
||||
val task =
|
||||
createTestTask<GenerateCodegenArtifactsTask> {
|
||||
it.reactRoot.set(reactRoot)
|
||||
it.codegenDir.set(codegenDir)
|
||||
it.generatedSrcDir.set(outputDir)
|
||||
it.nodeExecutableAndArgs.set(listOf("--verbose"))
|
||||
it.codegenJavaPackageName.set("com.example.test")
|
||||
it.libraryName.set("example-test")
|
||||
}
|
||||
|
||||
task.setupCommandLine()
|
||||
|
||||
assertEquals(
|
||||
listOf(
|
||||
"yarn",
|
||||
"--verbose",
|
||||
File(reactRoot, "scripts/generate-specs-cli.js").toString(),
|
||||
"android",
|
||||
File(outputDir, "schema.json").toString(),
|
||||
outputDir.toString(),
|
||||
"example-test",
|
||||
"com.example.test",
|
||||
),
|
||||
task.commandLine.toMutableList())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user