Skip to content
Snippets Groups Projects
Verified Commit a368292d authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Resolve issues with changes in ksp

parent 368b0fa1
No related branches found
No related tags found
No related merge requests found
Showing
with 59 additions and 23 deletions
......@@ -16,11 +16,12 @@ import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
import com.squareup.kotlinpoet.STRING
import de.justjanne.libquassel.annotations.ProtocolSide
import de.justjanne.libquassel.generator.rpcmodel.RpcModel
import transformName
object Constants {
fun invokerName(model: RpcModel.ObjectModel, side: ProtocolSide) = ClassName(
TYPENAME_INVOKER.packageName,
"${model.rpcName}${side.name.toLowerCase().capitalize()}Invoker"
"${model.rpcName}${transformName(side.name)}Invoker"
)
val TYPENAME_ANY = ANY.copy(nullable = true)
......
......@@ -21,20 +21,10 @@ import de.justjanne.libquassel.generator.visitors.KotlinSaver
import de.justjanne.libquassel.generator.visitors.RpcModelProcessor
import de.justjanne.libquassel.generator.visitors.RpcObjectCollector
class InvokerProcessor : SymbolProcessor {
lateinit var codeGenerator: CodeGenerator
lateinit var logger: KSPLogger
override fun init(
options: Map<String, String>,
kotlinVersion: KotlinVersion,
codeGenerator: CodeGenerator,
logger: KSPLogger
) {
this.logger = logger
this.codeGenerator = codeGenerator
}
class InvokerProcessor(
private val codeGenerator: CodeGenerator,
private val logger: KSPLogger
) : SymbolProcessor {
override fun process(resolver: Resolver): List<KSAnnotated> {
val annotationModels = resolver.getSymbolsWithAnnotation(SyncedObject::class.java.canonicalName)
val rpcModels = annotationModels.mapNotNull { it.accept(KSDeclarationParser(resolver, logger), Unit) }
......@@ -54,6 +44,4 @@ class InvokerProcessor : SymbolProcessor {
return emptyList()
}
override fun finish() = Unit
}
/*
* libquassel
* Copyright (c) 2021 Janne Mareike Koschinski
*
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at https://mozilla.org/MPL/2.0/.
*/
package de.justjanne.libquassel.generator
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
import com.google.devtools.ksp.processing.SymbolProcessorProvider
class InvokerProcessorProvider : SymbolProcessorProvider {
override fun create(environment: SymbolProcessorEnvironment) = InvokerProcessor(
environment.codeGenerator,
environment.logger
)
}
......@@ -7,7 +7,7 @@
* obtain one at https://mozilla.org/MPL/2.0/.
*/
package de.justjanne.libquassel.generator.util
package de.justjanne.libquassel.generator.util.ksp
import com.google.devtools.ksp.symbol.KSDeclaration
import com.google.devtools.ksp.symbol.KSType
......
......@@ -7,10 +7,12 @@
* obtain one at https://mozilla.org/MPL/2.0/.
*/
package de.justjanne.libquassel.generator.util
package de.justjanne.libquassel.generator.util.ksp
import com.google.devtools.ksp.symbol.KSDeclaration
import com.google.devtools.ksp.symbol.KSType
import com.google.devtools.ksp.symbol.KSTypeAlias
import com.google.devtools.ksp.symbol.KSTypeReference
import com.google.devtools.ksp.symbol.Variance
import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
......@@ -20,7 +22,13 @@ import com.squareup.kotlinpoet.WildcardTypeName
fun KSDeclaration.asTypeName(): TypeName =
ClassName(packageName.asString(), simpleName.asString())
fun KSTypeReference.asTypeName(): TypeName = resolve().asTypeName()
fun KSType.asTypeName(): TypeName {
when (val decl = declaration) {
is KSTypeAlias -> return decl.type.resolve().asTypeName()
}
val baseType = asClassName()
if (arguments.isEmpty()) {
return baseType
......
......@@ -19,6 +19,7 @@ package de.justjanne.libquassel.generator.util
import com.google.devtools.ksp.symbol.KSAnnotation
import com.google.devtools.ksp.symbol.KSType
import com.squareup.kotlinpoet.ClassName
import de.justjanne.libquassel.generator.util.ksp.asTypeName
internal inline fun <reified T> KSAnnotation.getMember(name: String): T? {
val matchingArg = arguments.find { it.name?.asString() == name }
......
......@@ -12,6 +12,7 @@ package de.justjanne.libquassel.generator.util
import com.google.devtools.ksp.symbol.KSType
import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.asClassName
import de.justjanne.libquassel.generator.util.ksp.asClassName
internal inline fun <reified T : Enum<T>> KSType.toEnum(): T? {
return asClassName().toEnum(T::class.java)
......
import java.util.Locale
/*
* libquassel
* Copyright (c) 2021 Janne Mareike Koschinski
*
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at https://mozilla.org/MPL/2.0/.
*/
fun transformName(name: String): String =
name.lowercase(Locale.ROOT).replaceFirstChar {
it.uppercase(Locale.ROOT)
}
......@@ -21,7 +21,7 @@ import com.squareup.kotlinpoet.ClassName
import de.justjanne.libquassel.generator.annotation.RpcFunctionAnnotation
import de.justjanne.libquassel.generator.annotation.RpcObjectAnnotation
import de.justjanne.libquassel.generator.rpcmodel.RpcModel
import de.justjanne.libquassel.generator.util.asTypeName
import de.justjanne.libquassel.generator.util.ksp.asTypeName
class KSDeclarationParser(
private val resolver: Resolver,
......@@ -44,6 +44,7 @@ class KSDeclarationParser(
classDeclaration.getDeclaredFunctions()
.mapNotNull { it.accept(this, Unit) }
.mapNotNull { it as? RpcModel.FunctionModel }
.toList()
)
} catch (t: Throwable) {
logger.error("Error processing ${annotation.name}", classDeclaration)
......@@ -83,7 +84,7 @@ class KSDeclarationParser(
return RpcModel.ParameterModel(
valueParameter,
valueParameter.name?.asString(),
valueParameter.type.resolve().asTypeName()
valueParameter.type.asTypeName()
)
} catch (t: Throwable) {
logger.error("Error processing ${valueParameter.name?.asString()}", valueParameter)
......
......@@ -32,12 +32,13 @@ import de.justjanne.libquassel.generator.rpcmodel.RpcModelVisitor
import de.justjanne.libquassel.generator.util.kotlinpoet.ArgString
import de.justjanne.libquassel.generator.util.kotlinpoet.buildWhen
import de.justjanne.libquassel.generator.util.kotlinpoet.withIndent
import transformName
class RpcModelProcessor : RpcModelVisitor<ProtocolSide, KotlinModel?> {
override fun visitObjectModel(model: RpcModel.ObjectModel, data: ProtocolSide): KotlinModel {
val name = ClassName(
TYPENAME_INVOKER.packageName,
"${model.rpcName}${data.name.toLowerCase().capitalize()}Invoker"
"${model.rpcName}${transformName(data.name)}Invoker"
)
return KotlinModel.FileModel(
listOf(model.source),
......
de.justjanne.libquassel.generator.InvokerProcessor
de.justjanne.libquassel.generator.InvokerProcessorProvider
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment