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 ...@@ -16,11 +16,12 @@ import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
import com.squareup.kotlinpoet.STRING import com.squareup.kotlinpoet.STRING
import de.justjanne.libquassel.annotations.ProtocolSide import de.justjanne.libquassel.annotations.ProtocolSide
import de.justjanne.libquassel.generator.rpcmodel.RpcModel import de.justjanne.libquassel.generator.rpcmodel.RpcModel
import transformName
object Constants { object Constants {
fun invokerName(model: RpcModel.ObjectModel, side: ProtocolSide) = ClassName( fun invokerName(model: RpcModel.ObjectModel, side: ProtocolSide) = ClassName(
TYPENAME_INVOKER.packageName, TYPENAME_INVOKER.packageName,
"${model.rpcName}${side.name.toLowerCase().capitalize()}Invoker" "${model.rpcName}${transformName(side.name)}Invoker"
) )
val TYPENAME_ANY = ANY.copy(nullable = true) val TYPENAME_ANY = ANY.copy(nullable = true)
......
...@@ -21,20 +21,10 @@ import de.justjanne.libquassel.generator.visitors.KotlinSaver ...@@ -21,20 +21,10 @@ import de.justjanne.libquassel.generator.visitors.KotlinSaver
import de.justjanne.libquassel.generator.visitors.RpcModelProcessor import de.justjanne.libquassel.generator.visitors.RpcModelProcessor
import de.justjanne.libquassel.generator.visitors.RpcObjectCollector import de.justjanne.libquassel.generator.visitors.RpcObjectCollector
class InvokerProcessor : SymbolProcessor { class InvokerProcessor(
lateinit var codeGenerator: CodeGenerator private val codeGenerator: CodeGenerator,
lateinit var logger: KSPLogger private val logger: KSPLogger
) : SymbolProcessor {
override fun init(
options: Map<String, String>,
kotlinVersion: KotlinVersion,
codeGenerator: CodeGenerator,
logger: KSPLogger
) {
this.logger = logger
this.codeGenerator = codeGenerator
}
override fun process(resolver: Resolver): List<KSAnnotated> { override fun process(resolver: Resolver): List<KSAnnotated> {
val annotationModels = resolver.getSymbolsWithAnnotation(SyncedObject::class.java.canonicalName) val annotationModels = resolver.getSymbolsWithAnnotation(SyncedObject::class.java.canonicalName)
val rpcModels = annotationModels.mapNotNull { it.accept(KSDeclarationParser(resolver, logger), Unit) } val rpcModels = annotationModels.mapNotNull { it.accept(KSDeclarationParser(resolver, logger), Unit) }
...@@ -54,6 +44,4 @@ class InvokerProcessor : SymbolProcessor { ...@@ -54,6 +44,4 @@ class InvokerProcessor : SymbolProcessor {
return emptyList() 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 @@ ...@@ -7,7 +7,7 @@
* obtain one at https://mozilla.org/MPL/2.0/. * 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.KSDeclaration
import com.google.devtools.ksp.symbol.KSType import com.google.devtools.ksp.symbol.KSType
......
...@@ -7,10 +7,12 @@ ...@@ -7,10 +7,12 @@
* obtain one at https://mozilla.org/MPL/2.0/. * 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.KSDeclaration
import com.google.devtools.ksp.symbol.KSType 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.google.devtools.ksp.symbol.Variance
import com.squareup.kotlinpoet.ClassName import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
...@@ -20,7 +22,13 @@ import com.squareup.kotlinpoet.WildcardTypeName ...@@ -20,7 +22,13 @@ import com.squareup.kotlinpoet.WildcardTypeName
fun KSDeclaration.asTypeName(): TypeName = fun KSDeclaration.asTypeName(): TypeName =
ClassName(packageName.asString(), simpleName.asString()) ClassName(packageName.asString(), simpleName.asString())
fun KSTypeReference.asTypeName(): TypeName = resolve().asTypeName()
fun KSType.asTypeName(): TypeName { fun KSType.asTypeName(): TypeName {
when (val decl = declaration) {
is KSTypeAlias -> return decl.type.resolve().asTypeName()
}
val baseType = asClassName() val baseType = asClassName()
if (arguments.isEmpty()) { if (arguments.isEmpty()) {
return baseType return baseType
......
...@@ -19,6 +19,7 @@ package de.justjanne.libquassel.generator.util ...@@ -19,6 +19,7 @@ package de.justjanne.libquassel.generator.util
import com.google.devtools.ksp.symbol.KSAnnotation import com.google.devtools.ksp.symbol.KSAnnotation
import com.google.devtools.ksp.symbol.KSType import com.google.devtools.ksp.symbol.KSType
import com.squareup.kotlinpoet.ClassName import com.squareup.kotlinpoet.ClassName
import de.justjanne.libquassel.generator.util.ksp.asTypeName
internal inline fun <reified T> KSAnnotation.getMember(name: String): T? { internal inline fun <reified T> KSAnnotation.getMember(name: String): T? {
val matchingArg = arguments.find { it.name?.asString() == name } val matchingArg = arguments.find { it.name?.asString() == name }
......
...@@ -12,6 +12,7 @@ package de.justjanne.libquassel.generator.util ...@@ -12,6 +12,7 @@ package de.justjanne.libquassel.generator.util
import com.google.devtools.ksp.symbol.KSType import com.google.devtools.ksp.symbol.KSType
import com.squareup.kotlinpoet.ClassName import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.asClassName import com.squareup.kotlinpoet.asClassName
import de.justjanne.libquassel.generator.util.ksp.asClassName
internal inline fun <reified T : Enum<T>> KSType.toEnum(): T? { internal inline fun <reified T : Enum<T>> KSType.toEnum(): T? {
return asClassName().toEnum(T::class.java) 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 ...@@ -21,7 +21,7 @@ import com.squareup.kotlinpoet.ClassName
import de.justjanne.libquassel.generator.annotation.RpcFunctionAnnotation import de.justjanne.libquassel.generator.annotation.RpcFunctionAnnotation
import de.justjanne.libquassel.generator.annotation.RpcObjectAnnotation import de.justjanne.libquassel.generator.annotation.RpcObjectAnnotation
import de.justjanne.libquassel.generator.rpcmodel.RpcModel import de.justjanne.libquassel.generator.rpcmodel.RpcModel
import de.justjanne.libquassel.generator.util.asTypeName import de.justjanne.libquassel.generator.util.ksp.asTypeName
class KSDeclarationParser( class KSDeclarationParser(
private val resolver: Resolver, private val resolver: Resolver,
...@@ -44,6 +44,7 @@ class KSDeclarationParser( ...@@ -44,6 +44,7 @@ class KSDeclarationParser(
classDeclaration.getDeclaredFunctions() classDeclaration.getDeclaredFunctions()
.mapNotNull { it.accept(this, Unit) } .mapNotNull { it.accept(this, Unit) }
.mapNotNull { it as? RpcModel.FunctionModel } .mapNotNull { it as? RpcModel.FunctionModel }
.toList()
) )
} catch (t: Throwable) { } catch (t: Throwable) {
logger.error("Error processing ${annotation.name}", classDeclaration) logger.error("Error processing ${annotation.name}", classDeclaration)
...@@ -83,7 +84,7 @@ class KSDeclarationParser( ...@@ -83,7 +84,7 @@ class KSDeclarationParser(
return RpcModel.ParameterModel( return RpcModel.ParameterModel(
valueParameter, valueParameter,
valueParameter.name?.asString(), valueParameter.name?.asString(),
valueParameter.type.resolve().asTypeName() valueParameter.type.asTypeName()
) )
} catch (t: Throwable) { } catch (t: Throwable) {
logger.error("Error processing ${valueParameter.name?.asString()}", valueParameter) logger.error("Error processing ${valueParameter.name?.asString()}", valueParameter)
......
...@@ -32,12 +32,13 @@ import de.justjanne.libquassel.generator.rpcmodel.RpcModelVisitor ...@@ -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.ArgString
import de.justjanne.libquassel.generator.util.kotlinpoet.buildWhen import de.justjanne.libquassel.generator.util.kotlinpoet.buildWhen
import de.justjanne.libquassel.generator.util.kotlinpoet.withIndent import de.justjanne.libquassel.generator.util.kotlinpoet.withIndent
import transformName
class RpcModelProcessor : RpcModelVisitor<ProtocolSide, KotlinModel?> { class RpcModelProcessor : RpcModelVisitor<ProtocolSide, KotlinModel?> {
override fun visitObjectModel(model: RpcModel.ObjectModel, data: ProtocolSide): KotlinModel { override fun visitObjectModel(model: RpcModel.ObjectModel, data: ProtocolSide): KotlinModel {
val name = ClassName( val name = ClassName(
TYPENAME_INVOKER.packageName, TYPENAME_INVOKER.packageName,
"${model.rpcName}${data.name.toLowerCase().capitalize()}Invoker" "${model.rpcName}${transformName(data.name)}Invoker"
) )
return KotlinModel.FileModel( return KotlinModel.FileModel(
listOf(model.source), 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.
Please register or to comment