Skip to content

Commit f1dc8bd

Browse files
committed
feat: auto-detect nativePackage from source package declarations
nativePackage is now optional — deduced from the package statement in Kotlin source files. Explicit config still works as override.
1 parent ab2ea6a commit f1dc8bd

2 files changed

Lines changed: 12 additions & 5 deletions

File tree

README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ kotlin {
7373

7474
kotlinNativeExport {
7575
nativeLibName = "mylib" // output: libmylib.so (release ~700KB)
76-
nativePackage = "com.example" // package for generated JVM proxies
76+
// nativePackage is auto-detected from your Kotlin source package declarations
77+
// nativePackage = "com.example" // override only if needed
7778
buildType = "release" // "release" (default, optimized) or "debug"
7879
}
7980
```
@@ -427,8 +428,9 @@ kotlinNativeExport {
427428
// Produces: libmylib.so (Linux), libmylib.dylib (macOS), mylib.dll (Windows)
428429
nativeLibName = "mylib"
429430

430-
// Package for the generated JVM proxy classes (required)
431-
nativePackage = "com.example"
431+
// Package for JVM proxies — auto-detected from your Kotlin source package declarations
432+
// Only set this if you have multiple packages and want to override the auto-detection
433+
// nativePackage = "com.example"
432434

433435
// Build type: "release" (default, ~700KB .so) or "debug" (~6MB .so)
434436
buildType = "release"
@@ -498,7 +500,7 @@ kotlin {
498500

499501
kotlinNativeExport {
500502
nativeLibName = "mylib"
501-
nativePackage = "com.example.mylib"
503+
// nativePackage auto-detected from source package declarations
502504
}
503505
```
504506

plugin-build/plugin/src/main/kotlin/io/github/kdroidfilter/nucleusnativeaccess/plugin/analysis/PsiParseWorkAction.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,15 @@ abstract class PsiParseWorkAction : WorkAction<PsiParseWorkAction.Params> {
2929
val nativeFiles = parameters.nativeSourceFiles.files
3030
val commonFiles = parameters.commonSourceFiles.files
3131
val libName = parameters.libName.get()
32-
val jvmPackage = parameters.jvmPackage.get()
32+
val configuredPackage = parameters.jvmPackage.get()
3333

3434
val module = PsiSourceParser().parse(nativeFiles, libName, commonFiles)
3535

36+
// Auto-detect package from sources if not explicitly configured
37+
val jvmPackage = configuredPackage.ifEmpty {
38+
module.packages.firstOrNull() ?: ""
39+
}
40+
3641
// Generate native bridges
3742
val nativeBridgesDir = parameters.nativeBridgesDir.get().asFile
3843
if (module.classes.isNotEmpty() || module.enums.isNotEmpty() || module.functions.isNotEmpty()) {

0 commit comments

Comments
 (0)