FIR IDE/LC: introduce/use KtTypeMappingMode
This commit is contained in:
committed by
Ilya Kirillov
parent
0da9ef873a
commit
4eec381d1b
+2
-3
@@ -10,11 +10,11 @@ import com.intellij.psi.impl.PsiClassImplUtil
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||
import org.jetbrains.kotlin.analysis.api.isValid
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
|
||||
import org.jetbrains.kotlin.light.classes.symbol.*
|
||||
import org.jetbrains.kotlin.light.classes.symbol.classes.createConstructors
|
||||
import org.jetbrains.kotlin.light.classes.symbol.classes.createMethods
|
||||
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
||||
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
|
||||
internal class FirLightClassForEnumEntry(
|
||||
@@ -82,8 +82,7 @@ internal class FirLightClassForEnumEntry(
|
||||
|
||||
private val _extendsList: PsiReferenceList? by lazyPub {
|
||||
val mappedType = analyzeWithSymbolAsContext(enumEntrySymbol) {
|
||||
enumEntrySymbol.annotatedType
|
||||
.type.asPsiType(this@FirLightClassForEnumEntry, TypeMappingMode.SUPER_TYPE) as? PsiClassType
|
||||
enumEntrySymbol.annotatedType.type.asPsiType(this@FirLightClassForEnumEntry, KtTypeMappingMode.SUPER_TYPE) as? PsiClassType
|
||||
?: return@lazyPub null
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -67,8 +67,7 @@ internal class FirLightFieldForEnumEntry(
|
||||
private val _type: PsiType by lazyPub {
|
||||
analyzeWithSymbolAsContext(enumEntrySymbol) {
|
||||
enumEntrySymbol.annotatedType.type.asPsiType(this@FirLightFieldForEnumEntry)
|
||||
?: this@FirLightFieldForEnumEntry.nonExistentType()
|
||||
}
|
||||
} ?: nonExistentType()
|
||||
}
|
||||
|
||||
override fun getType(): PsiType = _type
|
||||
|
||||
+1
-2
@@ -41,8 +41,7 @@ internal class FirLightFieldForObjectSymbol(
|
||||
private val _type: PsiType by lazyPub {
|
||||
analyzeWithSymbolAsContext(objectSymbol) {
|
||||
objectSymbol.buildSelfClassType().asPsiType(this@FirLightFieldForObjectSymbol)
|
||||
?: this@FirLightFieldForObjectSymbol.nonExistentType()
|
||||
}
|
||||
} ?: nonExistentType()
|
||||
}
|
||||
|
||||
private val _identifier: PsiIdentifier by lazyPub {
|
||||
|
||||
+3
-10
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.api.isValid
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtLiteralConstantValue
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtProperty
|
||||
|
||||
@@ -34,18 +35,10 @@ internal class FirLightFieldForPropertySymbol(
|
||||
when {
|
||||
isDelegated ->
|
||||
(kotlinOrigin as? KtProperty)?.delegateExpression?.let {
|
||||
val ktType = it.getKtType()
|
||||
ktType?.asPsiType(
|
||||
this@FirLightFieldForPropertySymbol,
|
||||
ktType.getOptimalModeForReturnType(containingClass.isAnnotationType)
|
||||
)
|
||||
it.getKtType()?.asPsiType(this@FirLightFieldForPropertySymbol, KtTypeMappingMode.RETURN_TYPE)
|
||||
}
|
||||
else -> {
|
||||
val ktType = propertySymbol.annotatedType.type
|
||||
ktType.asPsiType(
|
||||
this@FirLightFieldForPropertySymbol,
|
||||
ktType.getOptimalModeForReturnType(containingClass.isAnnotationType)
|
||||
)
|
||||
propertySymbol.annotatedType.type.asPsiType(this@FirLightFieldForPropertySymbol, KtTypeMappingMode.RETURN_TYPE)
|
||||
}
|
||||
}
|
||||
} ?: nonExistentType()
|
||||
|
||||
+1
-2
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.*
|
||||
import org.jetbrains.kotlin.analysis.api.types.*
|
||||
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.SpecialNames
|
||||
import java.util.*
|
||||
@@ -43,7 +42,7 @@ internal fun KtAnalysisSession.mapSuperType(
|
||||
if (type !is KtNonErrorClassType) return null
|
||||
val psiType = type.asPsiType(
|
||||
psiContext,
|
||||
if (kotlinCollectionAsIs) TypeMappingMode.SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS else TypeMappingMode.SUPER_TYPE,
|
||||
if (kotlinCollectionAsIs) KtTypeMappingMode.SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS else KtTypeMappingMode.SUPER_TYPE,
|
||||
)
|
||||
return psiType as? PsiClassType
|
||||
}
|
||||
|
||||
+4
-3
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtPropertyAccessorSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertyGetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi.getterName
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi.setterName
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
@@ -150,10 +151,10 @@ internal class FirLightAccessorMethodForSymbol(
|
||||
private val _returnedType: PsiType by lazyPub {
|
||||
if (!isGetter) return@lazyPub PsiType.VOID
|
||||
analyzeWithSymbolAsContext(containingPropertySymbol) {
|
||||
val ktType = containingPropertySymbol.annotatedType.type
|
||||
ktType.asPsiType(
|
||||
containingPropertySymbol.annotatedType.type.asPsiType(
|
||||
this@FirLightAccessorMethodForSymbol,
|
||||
ktType.getOptimalModeForReturnType(containingClass.isAnnotationType)
|
||||
KtTypeMappingMode.RETURN_TYPE,
|
||||
containingClass.isAnnotationType
|
||||
)
|
||||
} ?: nonExistentType()
|
||||
}
|
||||
|
||||
+3
-1
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
|
||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||
import org.jetbrains.kotlin.analysis.api.isValid
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
|
||||
import java.util.*
|
||||
@@ -147,7 +148,8 @@ internal class FirLightSimpleMethodForSymbol(
|
||||
}
|
||||
ktType.asPsiType(
|
||||
this@FirLightSimpleMethodForSymbol,
|
||||
ktType.getOptimalModeForReturnType(containingClass.isAnnotationType)
|
||||
KtTypeMappingMode.RETURN_TYPE,
|
||||
containingClass.isAnnotationType
|
||||
)
|
||||
} ?: nonExistentType()
|
||||
}
|
||||
|
||||
+3
-3
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.light.classes.symbol
|
||||
import com.intellij.psi.*
|
||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
|
||||
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
|
||||
import org.jetbrains.kotlin.psi.KtParameter
|
||||
|
||||
internal abstract class FirLightParameterBaseForSymbol(
|
||||
@@ -49,10 +49,10 @@ internal abstract class FirLightParameterBaseForSymbol(
|
||||
val convertedType = analyzeWithSymbolAsContext(parameterSymbol) {
|
||||
val ktType = parameterSymbol.annotatedType.type
|
||||
val typeMappingMode = when {
|
||||
ktType.isSuspendFunctionType -> TypeMappingMode.DEFAULT
|
||||
ktType.isSuspendFunctionType -> KtTypeMappingMode.DEFAULT
|
||||
// TODO: extract type mapping mode from annotation?
|
||||
// TODO: methods with declaration site wildcards?
|
||||
else -> ktType.getOptimalModeForValueParameter()
|
||||
else -> KtTypeMappingMode.VALUE_PARAMETER
|
||||
}
|
||||
ktType.asPsiType(this@FirLightParameterBaseForSymbol, typeMappingMode)
|
||||
} ?: nonExistentType()
|
||||
|
||||
Reference in New Issue
Block a user