blob: 37d07c92537ce777ddfa3f4a5e94d7e95ddcda60 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package com.google.devtools.ksp.symbol.impl.kotlin
import com.google.devtools.ksp.KSObjectCache
import com.google.devtools.ksp.findParentOfType
import com.google.devtools.ksp.symbol.*
import com.google.devtools.ksp.symbol.impl.toLocation
import org.jetbrains.kotlin.psi.KtIntersectionType
import org.jetbrains.kotlin.psi.KtTypeReference
import org.jetbrains.kotlin.psi.KtUserType
class KSDefNonNullReferenceImpl private constructor(val ktIntersectionType: KtIntersectionType) :
KSDefNonNullReference {
companion object : KSObjectCache<KtIntersectionType, KSDefNonNullReferenceImpl>() {
fun getCached(ktIntersectionType: KtIntersectionType) = KSDefNonNullReferenceImpl
.cache.getOrPut(ktIntersectionType) { KSDefNonNullReferenceImpl(ktIntersectionType) }
}
override val enclosedType: KSClassifierReference by lazy {
val lhs = ktIntersectionType.getLeftTypeRef()?.typeElement
if (lhs is KtUserType) {
KSClassifierReferenceImpl.getCached(lhs)
} else {
throw IllegalStateException("LHS operand of definitely non null type should be a user type")
}
}
override val typeArguments: List<KSTypeArgument>
get() = emptyList()
override val origin: Origin
get() = Origin.KOTLIN
override val location: Location
get() = ktIntersectionType.toLocation()
override val parent: KSNode? by lazy {
ktIntersectionType.findParentOfType<KtTypeReference>()?.let { KSTypeReferenceImpl.getCached(it) }
}
override fun toString() = "${enclosedType.referencedName()} & Any"
}
|