[Analysis API] KtPsiTypeProvider: drop asPsiTypeElement method

This was an implementation detail of SLC.
In the case, if we want to have proper parents for type annotations
in light classes, we have to properly implement `PsiTypeElement`
for required declarations.

^KT-66603
^KT-56870
This commit is contained in:
Dmitrii Gridin
2024-03-15 20:26:13 +01:00
committed by Space Team
parent 2fbde7a85c
commit e1bf85f790
7 changed files with 33 additions and 132 deletions
@@ -167,14 +167,13 @@ fun annotateByKtType(
psiType: PsiType,
ktType: KtType,
psiContext: PsiTypeElement,
modifierListAsParent: PsiModifierList?,
): PsiType {
fun KtType.getAnnotationsSequence(modifierList: PsiModifierList?): Sequence<List<PsiAnnotation>> = sequence {
fun KtType.getAnnotationsSequence(): Sequence<List<PsiAnnotation>> = sequence {
yield(
annotations.map { annoApp ->
SymbolLightSimpleAnnotation(
annoApp.classId?.asFqNameString(),
modifierList ?: psiContext,
psiContext,
annoApp.arguments,
annoApp.psi,
)
@@ -183,10 +182,10 @@ fun annotateByKtType(
(this@getAnnotationsSequence as? KtNonErrorClassType)?.ownTypeArguments?.forEach { typeProjection ->
typeProjection.type?.let {
yieldAll(it.getAnnotationsSequence(modifierList = null))
yieldAll(it.getAnnotationsSequence())
}
}
}
return psiType.annotateByTypeAnnotationProvider(ktType.getAnnotationsSequence(modifierListAsParent))
return psiType.annotateByTypeAnnotationProvider(ktType.getAnnotationsSequence())
}
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.light.classes.symbol.methods
import com.intellij.psi.*
import kotlinx.collections.immutable.PersistentMap
import kotlinx.collections.immutable.mutate
import org.jetbrains.kotlin.analysis.api.KtAnalysisNonPublicApi
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.hasAnnotation
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
@@ -230,16 +229,13 @@ internal class SymbolLightSimpleMethod(
else
KtTypeMappingMode.RETURN_TYPE
ktType.asPsiTypeElement(
ktType.asPsiType(
this@SymbolLightSimpleMethod,
allowErrorTypes = true,
typeMappingMode,
this@SymbolLightSimpleMethod.containingClass.isAnnotationType,
suppressWildcards = suppressWildcards(),
)?.let {
@OptIn(KtAnalysisNonPublicApi::class)
annotateByKtType(it.type, ktType, it, modifierList)
}
)
} ?: nonExistentType()
}
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.light.classes.symbol.parameters
import com.intellij.psi.*
import org.jetbrains.kotlin.analysis.api.KtAnalysisNonPublicApi
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
@@ -15,7 +14,6 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.light.classes.symbol.*
import org.jetbrains.kotlin.light.classes.symbol.annotations.annotateByKtType
import org.jetbrains.kotlin.light.classes.symbol.annotations.suppressWildcardMode
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.psi.KtParameter
@@ -79,15 +77,12 @@ internal abstract class SymbolLightParameterCommon(
val convertedType = run {
val ktType = parameterSymbol.returnType
ktType.asPsiTypeElement(
ktType.asPsiType(
this@SymbolLightParameterCommon,
allowErrorTypes = true,
ktType.typeMappingMode(),
suppressWildcards = parameterSymbol.suppressWildcardMode(),
)?.let {
@OptIn(KtAnalysisNonPublicApi::class)
annotateByKtType(it.type, ktType, it, modifierList)
}
)
} ?: nonExistentType()
if (isDeclaredAsVararg()) {
@@ -9,7 +9,6 @@ import com.intellij.psi.PsiIdentifier
import com.intellij.psi.PsiModifierList
import com.intellij.psi.PsiType
import com.intellij.psi.util.TypeConversionUtil
import org.jetbrains.kotlin.analysis.api.KtAnalysisNonPublicApi
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtReceiverParameterSymbol
@@ -88,15 +87,12 @@ internal class SymbolLightParameterForReceiver private constructor(
private val _type: PsiType by lazyPub {
withReceiverSymbol { receiver ->
val ktType = receiver.type
val psiType = ktType.asPsiTypeElement(
val psiType = ktType.asPsiType(
this,
allowErrorTypes = true,
ktType.typeMappingMode(),
suppressWildcards = receiver.suppressWildcard() ?: method.suppressWildcards(),
)?.let {
@OptIn(KtAnalysisNonPublicApi::class)
annotateByKtType(it.type, ktType, it, modifierList)
}
)
if (method is SymbolLightAnnotationsMethod) {
val erased = TypeConversionUtil.erasure(psiType)