Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch to codegen.kt #965

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions buildSrc/src/main/kotlin/kord-module.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ plugins {

repositories {
mavenCentral()
maven("https://oss.sonatype.org/content/repositories/snapshots")
}

dependencies {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ plugins {

repositories {
mavenCentral()
maven("https://oss.sonatype.org/content/repositories/snapshots")
}

dependencies {
Expand Down
3 changes: 3 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ fastZlib = "2.0.1" # https://github.com/timotejroiko/fast-zlib
# code generation
ksp = "2.0.21-1.0.25" # https://github.com/google/ksp
kotlinpoet = "1.18.1" # https://github.com/square/kotlinpoet
codegen-kt = "main-SNAPSHOT" # https://github.com/kordlib/codegen-kt

# tests
junit-jupiter = "5.11.2" # https://github.com/junit-team/junit5
Expand Down Expand Up @@ -68,6 +69,8 @@ stately-collections = { module = "co.touchlab:stately-concurrent-collections", v
ksp-api = { module = "com.google.devtools.ksp:symbol-processing-api", version.ref = "ksp" }
kotlinpoet = { module = "com.squareup:kotlinpoet", version.ref = "kotlinpoet" }
kotlinpoet-ksp = { module = "com.squareup:kotlinpoet-ksp", version.ref = "kotlinpoet" }
codegen-kt-kotlinpoet = { module = "dev.kord.codegen:kotlinpoet", version.ref = "codegen-kt" }
codegen-kt-ksp = { module = "dev.kord.codegen:ksp", version.ref = "codegen-kt" }

# tests
kotlin-test-annotations-common = { module = "org.jetbrains.kotlin:kotlin-test-annotations-common", version.ref = "kotlin" }
Expand Down
6 changes: 6 additions & 0 deletions ksp-processors/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,18 @@ kotlin {
}
}

repositories {
maven("https://oss.sonatype.org/content/repositories/snapshots")
}

dependencies {
implementation(projects.kspAnnotations)

implementation(libs.ksp.api)
implementation(libs.kotlinpoet)
implementation(libs.kotlinpoet.ksp)
implementation(libs.codegen.kt.kotlinpoet)
implementation(libs.codegen.kt.ksp)

implementation(libs.kotlinx.serialization.json) // use types directly
}
43 changes: 0 additions & 43 deletions ksp-processors/src/main/kotlin/KSPUtils.kt
Original file line number Diff line number Diff line change
@@ -1,52 +1,9 @@
package dev.kord.ksp

import com.google.devtools.ksp.KspExperimental
import com.google.devtools.ksp.findActualType
import com.google.devtools.ksp.getAnnotationsByType
import com.google.devtools.ksp.isDefault
import com.google.devtools.ksp.processing.Resolver
import com.google.devtools.ksp.symbol.*
import kotlin.reflect.KProperty1

internal inline fun <reified A : Annotation> Resolver.getSymbolsWithAnnotation(inDepth: Boolean = false) =
getSymbolsWithAnnotation(A::class.qualifiedName!!, inDepth)

internal fun Resolver.getNewClasses() = getNewFiles().flatMap { it.declarations.filterIsInstance<KSClassDeclaration>() }

internal inline fun <reified A : Annotation> KSAnnotation.isOfType() = isOfType(A::class.qualifiedName!!)

internal fun KSAnnotation.isOfType(qualifiedName: String) = annotationType.resolve()
.declaration.let { if (it is KSTypeAlias) it.findActualType() else it }
.qualifiedName?.asString() == qualifiedName

@OptIn(KspExperimental::class)
internal inline fun <reified A : Annotation> KSAnnotated.getAnnotationsByType() = getAnnotationsByType(A::class)

internal class AnnotationArguments<A : Annotation> private constructor(
private val arguments: Map<String, KSValueArgument>,
) {
private fun getArgument(parameter: KProperty1<A, Any>) = arguments.getValue(parameter.name)
private val KProperty1<A, Any>.value get() = getArgument(this).value

fun isDefault(parameter: KProperty1<A, Any>) = getArgument(parameter).isDefault()

// can't return non-nullable values because of https://github.com/google/ksp/issues/885
operator fun get(parameter: KProperty1<A, Annotation>) = parameter.value as KSAnnotation?
operator fun get(parameter: KProperty1<A, Array<out Annotation>>) =
@Suppress("UNCHECKED_CAST") (parameter.value as List<KSAnnotation>?)

companion object {
fun <A : Annotation> KSAnnotation.arguments() =
AnnotationArguments<A>(arguments.associateBy { it.name!!.asString() })
}
}

@Suppress("RecursivePropertyAccessor")
internal val KSReferenceElement.isClassifierReference: Boolean
get() = when (this) {
is KSDynamicReference, is KSCallableReference -> false
is KSClassifierReference -> true
is KSDefNonNullReference -> enclosedType.isClassifierReference
is KSParenthesizedReference -> element.isClassifierReference
else -> error("Unexpected KSReferenceElement: $this")
}
122 changes: 0 additions & 122 deletions ksp-processors/src/main/kotlin/KotlinPoetDsl.kt

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package dev.kord.ksp.generation

import com.google.devtools.ksp.processing.KSPLogger
import com.google.devtools.ksp.symbol.KSAnnotation
import dev.kord.ksp.AnnotationArguments.Companion.arguments
import dev.kord.codegen.ksp.annotations.AnnotationArguments.Companion.arguments
import dev.kord.ksp.Generate
import dev.kord.ksp.Generate.EntityType
import dev.kord.ksp.Generate.EntityType.*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import com.google.devtools.ksp.processing.*
import com.google.devtools.ksp.symbol.KSAnnotated
import com.google.devtools.ksp.symbol.KSFile
import com.squareup.kotlinpoet.ksp.writeTo
import dev.kord.codegen.ksp.getSymbolsWithAnnotation
import dev.kord.codegen.ksp.isOfType
import dev.kord.ksp.Generate
import dev.kord.ksp.generation.bitflags.generateFileSpec
import dev.kord.ksp.generation.kordenum.generateFileSpec
import dev.kord.ksp.getAnnotationsByType
import dev.kord.ksp.getSymbolsWithAnnotation
import dev.kord.ksp.isOfType

/** [SymbolProcessorProvider] for [GenerationProcessor]. */
class GenerationProcessorProvider : SymbolProcessorProvider {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,21 @@
package dev.kord.ksp.generation.bitflags

import com.google.devtools.ksp.symbol.KSFile
import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.*
import com.squareup.kotlinpoet.KModifier.*
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
import com.squareup.kotlinpoet.SET
import com.squareup.kotlinpoet.ksp.addOriginatingKSFile
import dev.kord.ksp.*
import dev.kord.codegen.kotlinpoet.addAnnotation
import dev.kord.codegen.kotlinpoet.addClass
import dev.kord.codegen.kotlinpoet.addCompanionObject
import dev.kord.codegen.kotlinpoet.addFunction
import dev.kord.codegen.kotlinpoet.addInitializerBlock
import dev.kord.codegen.kotlinpoet.addParameter
import dev.kord.codegen.kotlinpoet.addProperty
import dev.kord.codegen.kotlinpoet.getter
import dev.kord.codegen.kotlinpoet.primaryConstructor
import dev.kord.codegen.kotlinpoet.returns
import dev.kord.codegen.kotlinpoet.withControlFlow
import dev.kord.ksp.generation.GenerationEntity.BitFlags
import dev.kord.ksp.generation.GenerationEntity.BitFlags.ValueType.BIT_SET
import dev.kord.ksp.generation.GenerationEntity.BitFlags.ValueType.INT
Expand Down Expand Up @@ -106,6 +115,7 @@ internal fun BitFlags.generateFileSpec(originatingFile: KSFile) = fileSpecForGen
addStatement("shift++")
}
}

BIT_SET -> withControlFlow("for·(shift·in·0..<$valueName.size)") {
addStatement("if·($valueName[shift])·add(%T.fromShift(shift))", entityCN)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ package dev.kord.ksp.generation.bitflags
import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.KModifier.*
import com.squareup.kotlinpoet.TypeSpec
import dev.kord.ksp.*
import dev.kord.codegen.kotlinpoet.*
import dev.kord.ksp.generation.GenerationEntity.BitFlags
import dev.kord.ksp.generation.GenerationEntity.BitFlags.ValueType.BIT_SET
import dev.kord.ksp.generation.GenerationEntity.BitFlags.ValueType.INT
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,21 @@

package dev.kord.ksp.generation.bitflags

import com.squareup.kotlinpoet.*
import com.squareup.kotlinpoet.DelicateKotlinPoetApi
import com.squareup.kotlinpoet.KModifier.*
import dev.kord.ksp.addAnnotation
import dev.kord.ksp.addFunction
import com.squareup.kotlinpoet.LambdaTypeName
import com.squareup.kotlinpoet.TypeName
import com.squareup.kotlinpoet.TypeSpec
import com.squareup.kotlinpoet.UNIT
import dev.kord.codegen.kotlinpoet.addAnnotation
import dev.kord.codegen.kotlinpoet.addFunction
import dev.kord.codegen.kotlinpoet.returns
import dev.kord.ksp.generation.GenerationEntity.BitFlags
import dev.kord.ksp.generation.GenerationEntity.BitFlags.ValueType.BIT_SET
import dev.kord.ksp.generation.GenerationEntity.BitFlags.ValueType.INT
import dev.kord.ksp.generation.shared.CONTRACT
import dev.kord.ksp.generation.shared.EXACTLY_ONCE
import dev.kord.ksp.generation.shared.GenerationContext
import dev.kord.ksp.returns

context(BitFlags, GenerationContext)
internal fun TypeSpec.Builder.addContains(parameterName: String, parameterType: TypeName) = addFunction("contains") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,12 @@ import com.squareup.kotlinpoet.KModifier
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
import com.squareup.kotlinpoet.TypeSpec
import com.squareup.kotlinpoet.jvm.jvmField
import dev.kord.ksp.*
import dev.kord.codegen.kotlinpoet.addAnnotation
import dev.kord.codegen.kotlinpoet.addClass
import dev.kord.codegen.kotlinpoet.addCompanionObject
import dev.kord.codegen.kotlinpoet.addFunction
import dev.kord.codegen.kotlinpoet.addProperty
import dev.kord.codegen.kotlinpoet.primaryConstructor
import dev.kord.ksp.generation.GenerationEntity.BitFlags
import dev.kord.ksp.generation.shared.GenerationContext
import dev.kord.ksp.generation.shared.K_SERIALIZER
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ import com.squareup.kotlinpoet.*
import com.squareup.kotlinpoet.KModifier.*
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
import com.squareup.kotlinpoet.jvm.jvmName
import dev.kord.ksp.addAnnotation
import dev.kord.ksp.addFunction
import dev.kord.ksp.addParameter
import dev.kord.codegen.kotlinpoet.addAnnotation
import dev.kord.codegen.kotlinpoet.addFunction
import dev.kord.codegen.kotlinpoet.addParameter
import dev.kord.codegen.kotlinpoet.withControlFlow
import dev.kord.ksp.generation.GenerationEntity.BitFlags
import dev.kord.ksp.generation.shared.CONTRACT
import dev.kord.ksp.generation.shared.EXACTLY_ONCE
import dev.kord.ksp.generation.shared.GenerationContext
import dev.kord.ksp.withControlFlow

context(GenerationContext)
private val BitFlags.factoryFunctionName
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ import com.squareup.kotlinpoet.KModifier.PRIVATE
import com.squareup.kotlinpoet.MemberName
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
import com.squareup.kotlinpoet.TypeSpec
import dev.kord.ksp.addFunction
import dev.kord.ksp.addObject
import dev.kord.ksp.addParameter
import dev.kord.ksp.addProperty
import dev.kord.codegen.kotlinpoet.addFunction
import dev.kord.codegen.kotlinpoet.addObject
import dev.kord.codegen.kotlinpoet.addProperty
import dev.kord.codegen.kotlinpoet.addParameter
import dev.kord.ksp.generation.GenerationEntity.BitFlags
import dev.kord.ksp.generation.GenerationEntity.BitFlags.ValueType.BIT_SET
import dev.kord.ksp.generation.GenerationEntity.BitFlags.ValueType.INT
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import com.google.devtools.ksp.symbol.KSFile
import com.squareup.kotlinpoet.KModifier.PUBLIC
import com.squareup.kotlinpoet.KModifier.SEALED
import com.squareup.kotlinpoet.ksp.addOriginatingKSFile
import dev.kord.ksp.*
import dev.kord.codegen.kotlinpoet.*
import dev.kord.ksp.generation.GenerationEntity.KordEnum
import dev.kord.ksp.generation.shared.*
import kotlinx.serialization.Serializable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ package dev.kord.ksp.generation.kordenum

import com.squareup.kotlinpoet.KModifier.OVERRIDE
import com.squareup.kotlinpoet.TypeSpec
import dev.kord.ksp.addFunction
import dev.kord.ksp.addObject
import dev.kord.ksp.addParameter
import dev.kord.codegen.kotlinpoet.addFunction
import dev.kord.codegen.kotlinpoet.addObject
import dev.kord.codegen.kotlinpoet.addParameter
import dev.kord.ksp.generation.GenerationEntity.KordEnum
import dev.kord.ksp.generation.GenerationEntity.KordEnum.ValueType
import dev.kord.ksp.generation.GenerationEntity.KordEnum.ValueType.INT
Expand Down
Loading