Slide 17
Slide 17 text
Visitor
class SimpleGenerationVisitor(
private val codeGenerator: CodeGenerator,
private val logger: KSPLogger
) : KSVisitorVoid() {
override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) {
if (classDeclaration.classKind != ClassKind.INTERFACE) {
logger.error("Only interface allowed", classDeclaration)
return
}
val packageName = classDeclaration.packageName.asString()
val className = ClassName(packageName, "Abstract" + classDeclaration.simpleName.asString())
val typeSpec = TypeSpec.classBuilder(className)
.addModifiers(KModifier.ABSTRACT)
.addSuperinterface(classDeclaration.toClassName())
FileSpec.builder(packageName, className.simpleName)
.addType(typeSpec.build())
.build()
.writeTo(
codeGenerator,
Dependencies(
aggregating = false,
classDeclaration.containingFile!!
)
)
}
} 17