diff options
Diffstat (limited to 'test-utils/src')
-rw-r--r-- | test-utils/src/main/kotlin/com/google/devtools/ksp/processor/TypeAliasProcessor.kt | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/TypeAliasProcessor.kt b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/TypeAliasProcessor.kt index 6422b106..4b45275d 100644 --- a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/TypeAliasProcessor.kt +++ b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/TypeAliasProcessor.kt @@ -33,25 +33,47 @@ open class TypeAliasProcessor : AbstractTestProcessor() { } val sortedTypes = types.sortedBy { it.declaration.simpleName.asString() } - + val byFinalSignature = mutableMapOf<String, MutableList<KSType>>() for (i in sortedTypes) { val r = mutableListOf<String>() var a: KSType? = i - do { - r.add(a!!.declaration.simpleName.asString()) + while(a != null) { + r.add(a.toSignature()) a = (a.declaration as? KSTypeAlias)?.type?.resolve() - } while (a != null) + } results.add(r.joinToString(" = ")) + byFinalSignature.getOrPut(r.last()) { + mutableListOf() + }.add(i) } - - for (i in types) { - for (j in types) { - assert(i == j) + byFinalSignature.forEach { (signature, sameTypeAliases) -> + for (i in sameTypeAliases) { + for (j in sameTypeAliases) { + assert(i == j) { + "$i and $j both map to $signature, equals should return true" + } + } + } + assert(sameTypeAliases.map { it.hashCode() }.distinct().size == 1) { + "different hashcodes for members of $signature" } } + + return emptyList() } + private fun KSType.toSignature(): String = buildString { + append(declaration.simpleName.asString()) + if (arguments.isNotEmpty()) { + append("<") + arguments.map { + it.type?.resolve()?.toSignature() ?: "<error>" + }.forEach(this::append) + append(">") + } + } + override fun toResult(): List<String> { return results } |