From a3508f36d5ef2272323d946dccf7816b6bde55db Mon Sep 17 00:00:00 2001 From: Paulo Pinheiro Date: Mon, 15 Aug 2022 19:13:27 +0200 Subject: [PATCH] [Kotlin] Make sure namespace path exist for code generation (#7357) With a change introduce in 385dda5c3785ed8d6a35868bc169f07e40e889087fd2edc66, flatc was not able to emit code for Kotlin if a namespace is specified and the folders do not exist. The fix create folders if neded. Additional changes are introduced in gradle files to bring more visibility to the error messages. Co-authored-by: Derek Bailey --- .github/workflows/build.yml | 2 -- android/app/build.gradle | 23 +++++++++++-------- .../src/main/cpp/generated/animal_generated.h | 3 +-- .../main/java/generated/com/fbs/app/Animal.kt | 1 - .../gradle/wrapper/gradle-wrapper.properties | 2 +- src/idl_gen_kotlin.cpp | 7 +++--- 6 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 16d23744e..f9f45fa54 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -168,8 +168,6 @@ jobs: build-android: name: Build Android (on Linux) - # Renable once it is working again. - if: false runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 diff --git a/android/app/build.gradle b/android/app/build.gradle index dba6624f2..06e8cab0c 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -33,7 +33,6 @@ android { } } - ndkVersion "21.3.6528147" externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" @@ -52,16 +51,17 @@ android { fbsFiles.forEach{ commandLineArgs.add(it.path) } + commandLine commandLineArgs doFirst { delete "$outputCppDir/" mkdir "$outputCppDir/" } + doLast { - if (execResult.getExitValue() != 0) { - println(standardOutput.toString()) - throw new GradleException("flatc command line failed") + if (executionResult.get().exitValue != 0) { + throw new GradleException("flatc failed with: ${executionResult.get().toString()}") } } } @@ -74,6 +74,10 @@ android { standardOutput = new ByteArrayOutputStream() errorOutput = new ByteArrayOutputStream() + + setErrorOutput(errorOutput) + setStandardOutput(standardOutput) + def commandLineArgs = ['flatc', '-o', outputKotlinDir, '--kotlin'] fbsFiles.forEach{ commandLineArgs.add(it.path) @@ -85,17 +89,16 @@ android { mkdir "$outputKotlinDir/" } doLast { - if (execResult.getExitValue() != 0) { - println(standardOutput.toString()) - throw new GradleException("flatc command line failed") + if (executionResult.get().exitValue != 0) { + throw new GradleException("flatc failed with: ${executionResult.get().toString()}") } } } afterEvaluate { - android.applicationVariants.all { variant -> - variant.javaCompiler.dependsOn(generateFbsKotlin) - variant.javaCompiler.dependsOn(generateFbsCpp) + tasks.named("preBuild") { + dependsOn(generateFbsKotlin) + dependsOn(generateFbsCpp) } } diff --git a/android/app/src/main/cpp/generated/animal_generated.h b/android/app/src/main/cpp/generated/animal_generated.h index 1ba9b0900..aa23ec381 100644 --- a/android/app/src/main/cpp/generated/animal_generated.h +++ b/android/app/src/main/cpp/generated/animal_generated.h @@ -35,7 +35,7 @@ struct Animal FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { verifier.VerifyString(name()) && VerifyOffset(verifier, VT_SOUND) && verifier.VerifyString(sound()) && - VerifyField(verifier, VT_WEIGHT) && + VerifyField(verifier, VT_WEIGHT, 2) && verifier.EndTable(); } }; @@ -57,7 +57,6 @@ struct AnimalBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - AnimalBuilder &operator=(const AnimalBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); diff --git a/android/app/src/main/java/generated/com/fbs/app/Animal.kt b/android/app/src/main/java/generated/com/fbs/app/Animal.kt index 89da64635..214e6155a 100644 --- a/android/app/src/main/java/generated/com/fbs/app/Animal.kt +++ b/android/app/src/main/java/generated/com/fbs/app/Animal.kt @@ -7,7 +7,6 @@ import kotlin.math.sign import com.google.flatbuffers.* @Suppress("unused") -@ExperimentalUnsignedTypes class Animal : Table() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 00e33edef..aa991fcea 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/idl_gen_kotlin.cpp b/src/idl_gen_kotlin.cpp index 9561e996e..09c2bc4a5 100644 --- a/src/idl_gen_kotlin.cpp +++ b/src/idl_gen_kotlin.cpp @@ -134,9 +134,10 @@ class KotlinGenerator : public BaseGenerator { code += "import com.google.flatbuffers.*\n\n"; } code += classcode; - auto filename = namer_.Directories(ns) - + namer_.File(defname, SkipFile::Suffix); - + const std::string dirs = namer_.Directories(ns); + EnsureDirExists(dirs); + const std::string filename = + dirs + namer_.File(defname, /*skips=*/SkipFile::Suffix); return SaveFile(filename.c_str(), code, false); }