Skip to content

Instantly share code, notes, and snippets.

View Morfly's full-sized avatar

Pavlo Stavytskyi Morfly

View GitHub Profile
@Morfly
Morfly / FunctionProcessor.kt
Last active July 15, 2021 18:55
KSP, function processor, process function complete
class FunctionProcessor(...) : SymbolProcessor {
override fun process(resolver: Resolver): List<KSAnnotated> {
val symbols = resolver
.getSymbolsWithAnnotation("com.morfly.Function")
.filterIsInstance<KSClassDeclaration>()
if (!symbols.iterator().hasNext()) return emptyList()
val file: OutputStream = codeGenerator.createNewFile(
@Morfly
Morfly / Main.kt
Last active July 18, 2021 17:04
KSP example of interface, annotated with the custom annotation
@Function(name = "myAmazingFunction")
interface MyAmazingFunction {
val arg1: String
val arg2: Map<String, List<*>>
}
@Morfly
Morfly / GeneratedExample.kt
Last active July 18, 2021 14:44
KSP example of a generated function
fun myAmazingFunction(
arg1: String,
arg2: Map<String, List<*>>
) {
println("Hello from myAmazingFunction")
}
@Morfly
Morfly / build.gradle.kts
Last active July 15, 2021 18:29
KSP sample annotations build
// annotations/build.gradle.kts
plugins {
kotlin("jvm")
}
@Morfly
Morfly / build.gradle.kts
Last active April 16, 2022 06:13
KSP sample processor build
// processor/build.gradle.kts
plugins {
kotlin("jvm")
}
dependencies {
implementation(project(":annotations"))
implementation("com.google.devtools.ksp:symbol-processing-api:1.6.20-1.0.5")
}
@Morfly
Morfly / build.gradle.kts
Created July 15, 2021 18:31
KSP sample main-project build
// main-project/build.gradle.kts
plugins {
kotlin("jvm")
id("com.google.devtools.ksp")
}
dependencies {
implementation(project(":annotations"))
ksp(project(":processor"))
@Morfly
Morfly / settings.gradle.kts
Last active April 16, 2022 06:14
KSP sample build settings
// settings.gradle.kts
pluginManagement {
plugins {
id("com.google.devtools.ksp") version "1.6.20-1.0.5"
kotlin("jvm") version "1.6.20"
}
repositories {
gradlePluginPortal()
google()
@Morfly
Morfly / FunctionProcessor.kt
Last active August 12, 2021 09:22
KSP sample function processor constructor
package com.morfly
class FunctionProcessor(
private val codeGenerator: CodeGenerator,
private val logger: KSPLogger,
private val options: Map<String, String>
): SymbolProcessor {
override fun process(resolver: Resolver): List<KSAnnotated> {
// leave it blank for now
@Morfly
Morfly / FunctionProcessorProvider.kt
Last active July 15, 2021 19:07
KSP sample processor provider
package com.morfly
class FunctionProcessorProvider : SymbolProcessorProvider {
override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
return FunctionProcessor(
codeGenerator = environment.codeGenerator,
logger = environment.logger,
options = environment.options
)
@Morfly
Morfly / Function.kt
Created July 15, 2021 19:07
KSP sample annotation
package com.morfly
@Target(AnnotationTarget.CLASS)
annotation class Function(val name: String)