Skip to content

Instantly share code, notes, and snippets.

View myungpyo's full-sized avatar

myungpyo,shim myungpyo

View GitHub Profile
plugins {
//...
id("com.google.devtools.ksp") version "1.6.10-1.0.2"
//...
}
android {
//...
sourceSets {
val main by getting
class StickyStateVisitor(
private val saveCodeList: MutableList<String>,
private val restoreCodeList: MutableList<String>,
private val logger: KSPLogger,
): KSVisitorVoid() {
override fun visitPropertyDeclaration(property: KSPropertyDeclaration, data: Unit) {
val propertyName = property.simpleName.asString()
val resolvedType = property.type.resolve()
val propertyType = resolvedType.declaration.simpleName.asString()
private fun generateBinding(
ownerClassName: String,
sourceFiles: Array<KSFile>,
propertyDeclarations: List<KSPropertyDeclaration>
): List<KSPropertyDeclaration> {
// ...
outputStream.use {
with(CodeLoom(it)) {
private fun generateBinding(
ownerClassName: String,
propertyDeclarations: List<KSPropertyDeclaration>,
sourceFiles: Array<KSFile>,
): List<KSPropertyDeclaration> {
val ownerPackageName = ownerClassName.substringBeforeLast(".")
val ownerClassSimpleName = ownerClassName.substringAfterLast(".")
val bindingClassName = "${ownerClassSimpleName}StateBinding"
val saveCodeList = mutableListOf<String>()
override fun process(resolver: Resolver): List<KSAnnotated> {
// ...
return symbolMap.flatMap { (ownerClassName, propertyDeclarations) ->
val containingFile = symbolMap[ownerClassName]?.getOrNull(0)?.containingFile
generateBinding(resolver, ownerClassName, containingFile, propertyDeclarations)
}
}
override fun process(resolver: Resolver): List<KSAnnotated> {
val symbolMap = resolver
.getSymbolsWithAnnotation(STICKY_ANNOTATION_NAME)
.filterIsInstance<KSPropertyDeclaration>()
.groupBy {
resolver.getOwnerJvmClassName(it) ?: run {
logger.warn("Failed to find class name of property $it")
return emptyList()
}
}
class StickyStateProcessorProvider: SymbolProcessorProvider {
override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
return StickyStateProcessor(
codeGenerator = environment.codeGenerator,
logger = environment.logger,
options = environment.options,
)
}
}
plugins {
kotlin("jvm")
}
dependencies {
implementation(project(":core"))
implementation("com.google.devtools.ksp:symbol-processing-api:1.6.10-1.0.2")
}
buildscript {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
dependencies {
classpath("com.android.tools.build:gradle:7.0.4")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10")
class StickyStateProcessor(
private val codeGenerator: CodeGenerator,
private val logger: KSPLogger,
private val options: Map<String, String>,
) : SymbolProcessor {
override fun process(resolver: Resolver): List<KSAnnotated> {
return emptyList()
}
}