[AA] Provide API for obtaining array element type of KtType
KTIJ-23199
This commit is contained in:
+15
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeNullability
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
@@ -47,8 +48,12 @@ import org.jetbrains.kotlin.types.checker.intersectWrappedTypes
|
||||
import org.jetbrains.kotlin.types.error.ErrorType
|
||||
import org.jetbrains.kotlin.types.error.ErrorTypeKind
|
||||
import org.jetbrains.kotlin.types.error.ErrorUtils
|
||||
import org.jetbrains.kotlin.types.typeUtil.builtIns
|
||||
import org.jetbrains.kotlin.types.typeUtil.isGenericArrayOfTypeParameter
|
||||
import org.jetbrains.kotlin.types.typeUtil.isNothing
|
||||
import org.jetbrains.kotlin.types.typeUtil.makeNullable
|
||||
import org.jetbrains.kotlin.util.containingNonLocalDeclaration
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.applyIf
|
||||
|
||||
internal class KtFe10TypeProvider(
|
||||
override val analysisSession: KtFe10AnalysisSession
|
||||
@@ -146,6 +151,16 @@ internal class KtFe10TypeProvider(
|
||||
return descriptor.dispatchReceiverParameter?.type?.toKtType(analysisContext)
|
||||
}
|
||||
|
||||
override fun getArrayElementType(type: KtType): KtType? {
|
||||
require(type is KtFe10Type)
|
||||
val fe10Type = type.fe10Type
|
||||
|
||||
if (!KotlinBuiltIns.isArrayOrPrimitiveArray(fe10Type)) return null
|
||||
|
||||
val arrayElementType = fe10Type.builtIns.getArrayElementType(fe10Type)
|
||||
return arrayElementType.toKtType(analysisContext)
|
||||
}
|
||||
|
||||
private fun areTypesCompatible(a: KotlinType, b: KotlinType): Boolean {
|
||||
if (a.isNothing() || b.isNothing() || TypeUtils.equalTypes(a, b) || (a.isNullable() && b.isNullable())) {
|
||||
return true
|
||||
|
||||
Reference in New Issue
Block a user