Skip to content

Commit

Permalink
optimize(internal): 简单优化内部的KSP
Browse files Browse the repository at this point in the history
  • Loading branch information
ForteScarlet committed Aug 12, 2024
1 parent c4833b2 commit bd15b6a
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 214 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@

package kook.internal.processors.apireader

import com.google.devtools.ksp.KspExperimental
import com.google.devtools.ksp.getKotlinClassByName
import com.google.devtools.ksp.getClassDeclarationByName
import com.google.devtools.ksp.isAbstract
import com.google.devtools.ksp.processing.Resolver
import com.google.devtools.ksp.processing.SymbolProcessor
Expand All @@ -42,29 +41,11 @@ abstract class ReaderProcessor(private val environment: SymbolProcessorEnvironme
abstract val optionName: String
abstract val targetClassName: String

@OptIn(KspExperimental::class)
override fun process(resolver: Resolver): List<KSAnnotated> {
val targetFilePath: String? = environment.options[optionName]

val targetFile = File(targetFilePath ?: run {
val msg = "target output file option ['$optionName'] is null!"
environment.logger.warn(msg)
return emptyList()
})

environment.logger.info("target output file: ${targetFile.absolutePath}")
val targetClass = resolver.getKotlinClassByName(targetClassName)
environment.logger.info("apiClass: $targetClassName")
targetClass ?: return emptyList()

val targetClasses = resolver.getAllFiles().flatMap { it.declarations }
.filterIsInstance<KSClassDeclaration>()
.filter {
targetClass.asStarProjectedType().isAssignableFrom(it.asStarProjectedType())
}
.filter { !it.isAbstract() }
.toList()
private var targetFile: File? = null
private val targetClasses = mutableListOf<KSClassDeclaration>()

override fun finish() {
val targetFile = targetFile ?: return
if (!targetFile.exists()) {
targetFile.parentFile.mkdirs()
} else {
Expand All @@ -80,7 +61,32 @@ abstract class ReaderProcessor(private val environment: SymbolProcessorEnvironme
).use { writer ->
writer.writeDeflistTo(targetClasses)
}
}

override fun process(resolver: Resolver): List<KSAnnotated> {
val targetFilePath: String? = environment.options[optionName]

val targetFile = File(targetFilePath ?: run {
val msg = "target output file option ['$optionName'] is null!"
environment.logger.warn(msg)
return emptyList()
})

this.targetFile = targetFile

environment.logger.info("target output file: ${targetFile.absolutePath}")
val targetClass = resolver.getClassDeclarationByName(targetClassName)
environment.logger.info("apiClass: $targetClassName found $targetClass", targetClass)
targetClass ?: return emptyList()

// find all
resolver.getAllFiles().flatMap { it.declarations }
.filterIsInstance<KSClassDeclaration>()
.filter {
targetClass.asStarProjectedType().isAssignableFrom(it.asStarProjectedType())
}
.filter { !it.isAbstract() }
.toCollection(targetClasses)

return emptyList()
}
Expand All @@ -91,7 +97,7 @@ abstract class ReaderProcessor(private val environment: SymbolProcessorEnvironme
*
* @author ForteScarlet
*/
class ApiReaderProcessor(private val environment: SymbolProcessorEnvironment) : ReaderProcessor(environment) {
class ApiReaderProcessor(environment: SymbolProcessorEnvironment) : ReaderProcessor(environment) {
override val optionName: String = API_READ_TARGET_FILE_OPTION_KEY
override val targetClassName: String = KOOK_API_CLASS_NAME
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@

package kook.internal.processors.apireader

import com.google.devtools.ksp.KspExperimental
import com.google.devtools.ksp.getKotlinClassByName
import com.google.devtools.ksp.getClassDeclarationByName
import com.google.devtools.ksp.getVisibility
import com.google.devtools.ksp.processing.Resolver
import com.google.devtools.ksp.processing.SymbolProcessor
Expand Down Expand Up @@ -50,7 +49,29 @@ class EventReaderProcessor(private val environment: SymbolProcessorEnvironment)
private val targetClassName = environment.options[EVENT_READ_TARGET_CLASS_OPTION_KEY]
?: KOOK_EVENT_CLASS_NAME

@OptIn(KspExperimental::class)
private var targetFile: File? = null
private val targetClasses = mutableListOf<KSClassDeclaration>()

override fun finish() {
val targetFile = targetFile ?: return

if (!targetFile.exists()) {
targetFile.parentFile.mkdirs()
} else {
targetFile.delete()
}

targetFile.toPath().bufferedWriter(
options = arrayOf(
StandardOpenOption.WRITE,
StandardOpenOption.TRUNCATE_EXISTING,
StandardOpenOption.CREATE
)
).use { writer ->
writer.writeDeflistTo(targetClasses)
}
}

override fun process(resolver: Resolver): List<KSAnnotated> {
val targetFilePath: String? = environment.options[EVENT_READ_TARGET_FILE_OPTION_KEY]

Expand All @@ -59,37 +80,22 @@ class EventReaderProcessor(private val environment: SymbolProcessorEnvironment)
environment.logger.warn(msg)
return emptyList()
})
this.targetFile = targetFile

environment.logger.info("Target class name: $targetClassName")
environment.logger.info("Target output file: ${targetFile.absolutePath}")
val targetClass = resolver.getKotlinClassByName(targetClassName)
environment.logger.info("apiClass: $targetClass")
val targetClass = resolver.getClassDeclarationByName(targetClassName)
environment.logger.info("apiClass: $targetClass found at $targetClass", targetClass)
targetClass ?: return emptyList()

val targetClasses = resolver.getAllFiles().flatMap { it.declarations }
resolver.getAllFiles().flatMap { it.declarations }
.filterIsInstance<KSClassDeclaration>()
.filter {
targetClass.asStarProjectedType().isAssignableFrom(it.asStarProjectedType())
}
// .filter { !it.isAbstract() }
.filter { it.getVisibility() in EXPECT_VISIBILITY }
.toList()

if (!targetFile.exists()) {
targetFile.parentFile.mkdirs()
} else {
targetFile.delete()
}

targetFile.toPath().bufferedWriter(
options = arrayOf(
StandardOpenOption.WRITE,
StandardOpenOption.TRUNCATE_EXISTING,
StandardOpenOption.CREATE
)
).use { writer ->
writer.writeDeflistTo(targetClasses)
}
.toCollection(targetClasses)

return emptyList()
}
Expand Down
166 changes: 0 additions & 166 deletions simbot-component-kook-stdlib-test/build.gradle.kts

This file was deleted.

0 comments on commit bd15b6a

Please sign in to comment.