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