Skip to content

Commit e69642d

Browse files
committed
allow configuration of the visibility of types created by codegen
1 parent f71a82a commit e69642d

7 files changed

Lines changed: 36 additions & 3 deletions

File tree

chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ChasmExtension.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ enum class RuntimeDependencyConfiguration {
1414
IMPLEMENTATION,
1515
}
1616

17+
enum class TypeVisibility {
18+
INTERNAL,
19+
PUBLIC,
20+
}
21+
1722
@ChasmDsl
1823
open class ChasmExtension
1924
@Inject

chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ChasmPlugin.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ class ChasmPlugin : Plugin<Project> {
155155
config.set(module.codegenConfig)
156156
interfaceName.set(module.name)
157157
packageName.set(module.packageName)
158+
interfaceVisibility.set(module.interfaceVisibility)
159+
implementationVisibility.set(module.implementationVisibility)
158160
initializers.set(module.initializers)
159161
functions.set(module.functions)
160162
outputDirectory.set(project.layout.buildDirectory.dir("generated/kotlin/$sourceSetName"))

chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassImplementationGenerator.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,9 +278,16 @@ internal class ClassImplementationGenerator(
278278
operator fun invoke(
279279
packageName: String,
280280
interfaceName: String,
281+
visibility: TypeVisibility,
281282
wasmInterface: WasmInterface,
282283
): TypeSpec = TypeSpec.classBuilder(interfaceName + "Impl").apply {
283284

285+
val visibilityModifier = when (visibility) {
286+
TypeVisibility.INTERNAL -> KModifier.INTERNAL
287+
TypeVisibility.PUBLIC -> KModifier.PUBLIC
288+
}
289+
addModifiers(visibilityModifier)
290+
284291
addSuperinterface(ClassName(packageName, interfaceName))
285292

286293
addConstructor(constructorGenerator)

chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassInterfaceGenerator.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,16 @@ internal class ClassInterfaceGenerator(
5050
operator fun invoke(
5151
packageName: String,
5252
interfaceName: String,
53+
visibility: TypeVisibility,
5354
wasmInterface: WasmInterface,
5455
) = TypeSpec.interfaceBuilder(interfaceName).apply {
5556

57+
val visibilityModifier = when (visibility) {
58+
TypeVisibility.INTERNAL -> KModifier.INTERNAL
59+
TypeVisibility.PUBLIC -> KModifier.PUBLIC
60+
}
61+
addModifiers(visibilityModifier)
62+
5663
wasmInterface.functions.forEach { function ->
5764
addFunction(functionGenerator(packageName, function))
5865
}

chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenTask.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ abstract class CodegenTask
3838
@get:Input
3939
abstract val packageName: Property<String>
4040

41+
@get:Input
42+
abstract val interfaceVisibility: Property<TypeVisibility>
43+
44+
@get:Input
45+
abstract val implementationVisibility: Property<TypeVisibility>
46+
4147
@get:Input
4248
abstract val initializers: SetProperty<String>
4349

@@ -73,7 +79,7 @@ abstract class CodegenTask
7379
wasmFunctions = functions.get(),
7480
logger = logger,
7581
)
76-
val specs = generator(data)
82+
val specs = generator(interfaceVisibility.get(), implementationVisibility.get(), data)
7783

7884
val outputDir = outputDirectory.get().asFile
7985
specs.forEach { spec ->

chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceGenerator.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,20 @@ internal class WasmInterfaceGenerator(
3838
private val classImplementationGenerator: ClassImplementationGenerator = ClassImplementationGenerator(),
3939
) {
4040
operator fun invoke(
41+
interfaceVisibility: TypeVisibility,
42+
implementationVisibility: TypeVisibility,
4143
wasmInterface: WasmInterface,
4244
): List<FileSpec> {
4345

4446
val interfaceFile = FileSpec.builder(wasmInterface.packageName, wasmInterface.interfaceName).apply {
4547
wasmInterface.types.forEach { type ->
4648
addType(dataClassGenerator(wasmInterface.packageName, type))
4749
}
48-
addType(classInterfaceGenerator(wasmInterface.packageName, wasmInterface.interfaceName, wasmInterface))
50+
addType(classInterfaceGenerator(wasmInterface.packageName, wasmInterface.interfaceName, interfaceVisibility, wasmInterface))
4951
}.build()
5052

5153
val implementationFile = FileSpec.builder(wasmInterface.packageName, wasmInterface.interfaceName + "Impl").apply {
52-
addType(classImplementationGenerator(wasmInterface.packageName, wasmInterface.interfaceName, wasmInterface))
54+
addType(classImplementationGenerator(wasmInterface.packageName, wasmInterface.interfaceName, implementationVisibility, wasmInterface))
5355
}.build()
5456

5557
return listOf(interfaceFile, implementationFile)

chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmModule.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,15 @@ abstract class WasmModule
1919
abstract val packageName: Property<String>
2020
abstract val initializers: SetProperty<String>
2121
abstract val functions: ListProperty<WasmFunction>
22+
abstract val interfaceVisibility: Property<TypeVisibility>
23+
abstract val implementationVisibility: Property<TypeVisibility>
2224

2325
init {
2426
binary.convention(project.layout.projectDirectory.file(DEFAULT_MODULE_FILE_PATH))
2527
codegenConfig.convention(CodegenConfig())
2628
functions.convention(emptyList())
29+
interfaceVisibility.convention(TypeVisibility.PUBLIC)
30+
implementationVisibility.convention(TypeVisibility.INTERNAL)
2731
}
2832

2933
fun function(name: String, configuration: WasmFunctionBuilder.() -> Unit) {

0 commit comments

Comments
 (0)