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