diff options
Diffstat (limited to 'test-utils/src/main/kotlin/com/google/devtools/ksp/processor/AllFunctionsProcessor.kt')
-rw-r--r-- | test-utils/src/main/kotlin/com/google/devtools/ksp/processor/AllFunctionsProcessor.kt | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/AllFunctionsProcessor.kt b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/AllFunctionsProcessor.kt new file mode 100644 index 00000000..65c682b2 --- /dev/null +++ b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/AllFunctionsProcessor.kt @@ -0,0 +1,82 @@ +/* + * Copyright 2020 Google LLC + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.devtools.ksp.processor + +import com.google.devtools.ksp.processing.Resolver +import com.google.devtools.ksp.symbol.* + +class AllFunctionsProcessor : AbstractTestProcessor() { + val visitor = AllFunctionsVisitor() + + override fun toResult(): List<String> { + return visitor.toResult() + } + + override fun process(resolver: Resolver): List<KSAnnotated> { + resolver.getNewFiles().forEach { it.accept(visitor, Unit) } + return emptyList() + } + + class AllFunctionsVisitor : KSVisitorVoid() { + private val declarationsByClass = mutableMapOf<String, MutableList<String>>() + fun toResult(): List<String> { + return declarationsByClass.entries + .sortedBy { + it.key + }.flatMap { + listOf(it.key) + it.value + } + } + fun KSFunctionDeclaration.toSignature(): String { + return this.simpleName.asString() + + "(${this.parameters.map { + buildString { + append(it.type.resolve().declaration.qualifiedName?.asString()) + if (it.hasDefault) { + append("(hasDefault)") + } + if (it.isVararg) { + append(" ...") + } + } + }.joinToString(",")})" + + ": ${this.returnType?.resolve()?.declaration?.qualifiedName?.asString() ?: ""}" + } + + override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) { + val declarations = mutableListOf<String>() + // first add properties + declarations.addAll( + classDeclaration.getAllProperties().map { + it.toString() + }.sorted() + ) + // then add functions + declarations.addAll( + classDeclaration.getAllFunctions().map { + it.toSignature() + }.sorted() + ) + declarationsByClass["class: ${classDeclaration.simpleName.asString()}"] = declarations + } + + override fun visitFile(file: KSFile, data: Unit) { + file.declarations.forEach { it.accept(this, Unit) } + } + } +} |