From a368292dbfc2078ed423e0bf28962a4026abfa73 Mon Sep 17 00:00:00 2001 From: Janne Mareike Koschinski <janne@kuschku.de> Date: Sun, 6 Jun 2021 01:40:43 +0200 Subject: [PATCH] Resolve issues with changes in ksp --- .../libquassel/generator/Constants.kt | 3 ++- .../libquassel/generator/InvokerProcessor.kt | 20 ++++--------------- .../generator/InvokerProcessorProvider.kt | 20 +++++++++++++++++++ .../generator/util/ksp/asClassName.kt | 2 +- .../generator/util/ksp/asTypeName.kt | 10 +++++++++- .../generator/util/ksp/getMember.kt | 1 + .../libquassel/generator/util/ksp/toEnum.kt | 1 + .../generator/util/transformName.kt | 15 ++++++++++++++ .../generator/visitors/KSDeclarationParser.kt | 5 +++-- .../generator/visitors/RpcModelProcessor.kt | 3 ++- ...le.devtools.ksp.processing.SymbolProcessor | 1 - ...ols.ksp.processing.SymbolProcessorProvider | 1 + 12 files changed, 59 insertions(+), 23 deletions(-) create mode 100644 libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/InvokerProcessorProvider.kt create mode 100644 libquassel-generator/src/main/kotlin/de/justjanne/libquassel/generator/util/transformName.kt delete mode 100644 libquassel-generator/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessor create mode 100644 libquassel-generator/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider 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 3df1190..75d6e22 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 a154144..1f8e1da 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 0000000..2c6cfab --- /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 d7d9c35..e6469e8 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 c33a611..b190e18 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 953a710..8faafc9 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 c3370a6..bd73d21 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 0000000..6801916 --- /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 ddc240a..bdce78e 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 417d161..ac11ad8 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 3720f23..0000000 --- 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 0000000..1453ccd --- /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 -- GitLab