diff --git a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/Constants.kt b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/Constants.kt index 3df1190c7db3be3ca5f4e1baeae856218f7b75ea..75d6e2248e2ba35090a5258b8ca1e177cf2441df 100644 --- a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/Constants.kt +++ b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/Constants.kt @@ -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) diff --git a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/InvokerProcessor.kt b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/InvokerProcessor.kt index a154144c21f58f09fc9bc402a687bb0b65313a8d..1f8e1daa0dc222fb183843c37829cf6e3cc956e7 100644 --- a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/InvokerProcessor.kt +++ b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/InvokerProcessor.kt @@ -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 } diff --git a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/InvokerProcessorProvider.kt b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/InvokerProcessorProvider.kt new file mode 100644 index 0000000000000000000000000000000000000000..2c6cfab386298cab67ba3458aa79ed9b10632c27 --- /dev/null +++ b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/InvokerProcessorProvider.kt @@ -0,0 +1,20 @@ +/* + * 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 + ) +} diff --git a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/asClassName.kt b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/asClassName.kt index d7d9c359f7133c9765008d30d8c8dd3f9bf9c03a..e6469e81d2a8285ad54c71952ce5954e9511c0ea 100644 --- a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/asClassName.kt +++ b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/asClassName.kt @@ -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 diff --git a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/asTypeName.kt b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/asTypeName.kt index c33a611bd43ea87fa43a7adc8fec16bbcf3d279b..b190e18ef94b39167858dc2e446943d2aea9f6d3 100644 --- a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/asTypeName.kt +++ b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/asTypeName.kt @@ -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 diff --git a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/getMember.kt b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/getMember.kt index 953a710ada81e762abd5e66e03db98a55b62e973..8faafc9fd795852235a16bb3590529714fcb68e8 100644 --- a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/getMember.kt +++ b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/getMember.kt @@ -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 } diff --git a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/toEnum.kt b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/toEnum.kt index c3370a64dff41d98de3a7a3c001b2f12402ed33c..bd73d2188ecd9b9f4da8b8db22936eef8ea43776 100644 --- a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/toEnum.kt +++ b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/ksp/toEnum.kt @@ -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) diff --git a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/transformName.kt b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/transformName.kt new file mode 100644 index 0000000000000000000000000000000000000000..6801916c6bdd3ada6434972a6625bdcc9f0a347f --- /dev/null +++ b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/transformName.kt @@ -0,0 +1,15 @@ +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) + } diff --git a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/visitors/KSDeclarationParser.kt b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/visitors/KSDeclarationParser.kt index ddc240a3de29b37ddfe91e4d24b1dd60faba5a58..bdce78e76b209a809c89f71f56daef42af90c8c5 100644 --- a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/visitors/KSDeclarationParser.kt +++ b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/visitors/KSDeclarationParser.kt @@ -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) diff --git a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/visitors/RpcModelProcessor.kt b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/visitors/RpcModelProcessor.kt index 417d161dcfb5d86a9d1b1d4cd2786f2a5e0348cc..ac11ad800b73b3ccceb33788dc74fba474ae9803 100644 --- a/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/visitors/RpcModelProcessor.kt +++ b/libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/visitors/RpcModelProcessor.kt @@ -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), diff --git a/libquassel-generator/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessor b/libquassel-generator/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessor deleted file mode 100644 index 3720f23ceb0706e898b05f19e202cd213cc002c7..0000000000000000000000000000000000000000 --- a/libquassel-generator/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessor +++ /dev/null @@ -1 +0,0 @@ -de.justjanne.libquassel.generator.InvokerProcessor diff --git a/libquassel-generator/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider b/libquassel-generator/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider new file mode 100644 index 0000000000000000000000000000000000000000..1453ccdc21550991a50cf76728406b6e1473c4fb --- /dev/null +++ b/libquassel-generator/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider @@ -0,0 +1 @@ +de.justjanne.libquassel.generator.InvokerProcessorProvider