diff --git a/ksp/generator/src/main/kotlin/FilesWorkaround.kt b/ksp/generator/src/main/kotlin/FilesWorkaround.kt index 2dedf08884e..31d8d180e76 100644 --- a/ksp/generator/src/main/kotlin/FilesWorkaround.kt +++ b/ksp/generator/src/main/kotlin/FilesWorkaround.kt @@ -12,15 +12,22 @@ fun KSDeclaration.writeFile( suffix: String = "", relatedPath: String = "", force: Boolean = false, + forceUppercase: Boolean = true, fileSpecBuilder: () -> FileSpec ) { val containingFile = containingFile!! + val simpleName = if (forceUppercase) { + val rawSimpleName = simpleName.asString() + rawSimpleName.replaceFirst(rawSimpleName.first().toString(), rawSimpleName.first().uppercase()) + } else { + simpleName.asString() + } File( File( File(containingFile.filePath).parent, relatedPath ), - "$prefix${simpleName.asString()}$suffix.kt" + "$prefix${simpleName}$suffix.kt" ).takeIf { force || !it.exists() } ?.apply { parentFile.mkdirs() val fileSpec = fileSpecBuilder() diff --git a/ksp/variations/generator/src/main/kotlin/Processor.kt b/ksp/variations/generator/src/main/kotlin/Processor.kt index 3c0a0bc1bc1..59d8ad6bc5e 100644 --- a/ksp/variations/generator/src/main/kotlin/Processor.kt +++ b/ksp/variations/generator/src/main/kotlin/Processor.kt @@ -77,6 +77,11 @@ class Processor( if (it.isVararg) { addModifiers(KModifier.VARARG) } + it.annotations.forEach { + if (it.shortName.asString() == GenerationVariant::class.simpleName) return@forEach + + addAnnotation(it.toAnnotationSpec(omitDefaultValues = false)) + } } .build() to it.hasDefault } @@ -92,11 +97,16 @@ class Processor( val funSpec = FunSpec.builder(ksFunctionDeclaration.simpleName.asString()).apply { modifiers.addAll(ksFunctionDeclaration.modifiers.mapNotNull { it.toKModifier() }) ksFunctionDeclaration.annotations.forEach { + if (it.shortName.asString() == GenerateVariations::class.simpleName) return@forEach + addAnnotation(it.toAnnotationSpec(omitDefaultValues = false)) } ksFunctionDeclaration.extensionReceiver ?.let { receiver(it.toTypeName()) } + ksFunctionDeclaration.returnType ?.let { + returns(it.toTypeName()) + } } baseFunctionParameters.forEach { (parameter, hasDefault) -> if (hasDefault) { @@ -138,6 +148,7 @@ class Processor( accumulatedGeneration.receiverType ?.let { receiver(it) } + returns(accumulatedGeneration.returnType) accumulatedGeneration.parameters.forEach { val actualName = if (variation.argName.isEmpty()) it.name else variation.argName parameters.add( @@ -169,8 +180,15 @@ class Processor( defaults[it.name] = defaultValueString } } else { - it.toBuilder() + it.toBuilder().apply { + defaults[it.name] = it.name + } }) + .apply { + it.annotations.forEach { + addAnnotation(it) + } + } .build() ) } @@ -206,7 +224,7 @@ class Processor( it.writeFile(prefix = prefix, suffix = "GeneratedVariation") { FileSpec.builder( it.packageName.asString(), - "${it.simpleName.getShortName()}GeneratedVariation" + "${it.simpleName.getShortName().let { it.replaceFirst(it.first().toString(), it.first().uppercase()) }}GeneratedVariation" ).apply { addFileComment( """ diff --git a/ksp/variations/generator/test/src/commonMain/kotlin/sample2GeneratedVariation.kt b/ksp/variations/generator/test/src/commonMain/kotlin/Sample2GeneratedVariation.kt similarity index 81% rename from ksp/variations/generator/test/src/commonMain/kotlin/sample2GeneratedVariation.kt rename to ksp/variations/generator/test/src/commonMain/kotlin/Sample2GeneratedVariation.kt index 95623116d1f..6407b494f11 100644 --- a/ksp/variations/generator/test/src/commonMain/kotlin/sample2GeneratedVariation.kt +++ b/ksp/variations/generator/test/src/commonMain/kotlin/Sample2GeneratedVariation.kt @@ -47,3 +47,15 @@ public suspend fun SimpleType.sample2( ): Unit = sample2( arg1 = arg1, arg2 = with(arg22) {toInt()}, arg3 = arg3 ) + +public suspend fun SimpleType.sample2(arg12: Int, arg22: String): Unit = sample2( + arg12 = arg12, arg2 = with(arg22) {toInt()} +) + +public suspend fun SimpleType.sample2( + arg12: Int, + arg22: String, + arg3: Boolean, +): Unit = sample2( + arg12 = arg12, arg2 = with(arg22) {toInt()}, arg3 = arg3 +) diff --git a/ksp/variations/generator/test/src/commonMain/kotlin/sampleGeneratedVariation.kt b/ksp/variations/generator/test/src/commonMain/kotlin/SampleGeneratedVariation.kt similarity index 100% rename from ksp/variations/generator/test/src/commonMain/kotlin/sampleGeneratedVariation.kt rename to ksp/variations/generator/test/src/commonMain/kotlin/SampleGeneratedVariation.kt diff --git a/ksp/variations/generator/test/src/commonMain/kotlin/sampleVarargGeneratedVariation.kt b/ksp/variations/generator/test/src/commonMain/kotlin/SampleVarargGeneratedVariation.kt similarity index 100% rename from ksp/variations/generator/test/src/commonMain/kotlin/sampleVarargGeneratedVariation.kt rename to ksp/variations/generator/test/src/commonMain/kotlin/SampleVarargGeneratedVariation.kt