aboutsummaryrefslogtreecommitdiff
path: root/test-utils/src/main/kotlin/com
diff options
context:
space:
mode:
authorYigit Boyar <yboyar@google.com>2022-04-02 11:24:04 -0700
committerlaszio <ting-yuan@users.noreply.github.com>2022-04-03 22:02:17 -0700
commit99518cb6e5fda0d4b8089fc4d6138a33e617aa6d (patch)
tree0fe04a972c43fccff2fc3f7cad821bdeffbc7a96 /test-utils/src/main/kotlin/com
parent12bf1be111d3774bc5dad1b45580757ea149fd85 (diff)
downloadksp-99518cb6e5fda0d4b8089fc4d6138a33e617aa6d.tar.gz
repro for #881
Diffstat (limited to 'test-utils/src/main/kotlin/com')
-rw-r--r--test-utils/src/main/kotlin/com/google/devtools/ksp/processor/TypeAliasProcessor.kt38
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
}