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