[Analysis API FE1.0] fix "descriptor not found" exception on getting dispatch receiver type
This commit is contained in:
+4
-9
@@ -13,11 +13,13 @@ import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.Analysis
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.components.base.Fe10KtAnalysisSessionComponent
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.KtFe10DescSyntheticFieldSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.classId
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.getSymbolDescriptor
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.isInterfaceLike
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.KtFe10PsiDefaultPropertyGetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.KtFe10PsiSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.getResolutionScope
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.types.base.KtFe10Type
|
||||
@@ -124,15 +126,8 @@ internal class KtFe10TypeProvider(
|
||||
|
||||
override fun getDispatchReceiverType(symbol: KtCallableSymbol): KtType? {
|
||||
require(symbol is KtFe10Symbol)
|
||||
|
||||
val descriptor = when (symbol) {
|
||||
is KtFe10DescSymbol<*> -> symbol.descriptor as? CallableDescriptor
|
||||
is KtFe10PsiSymbol<*, *> -> symbol.descriptor as? CallableDescriptor
|
||||
is KtFe10DescSyntheticFieldSymbol -> symbol.descriptor
|
||||
else -> error("No callable descriptor on $symbol")
|
||||
}
|
||||
|
||||
return descriptor?.dispatchReceiverParameter?.type?.toKtType(analysisContext)
|
||||
val descriptor = symbol.getDescriptor() as? CallableDescriptor ?: return null
|
||||
return descriptor.dispatchReceiverParameter?.type?.toKtType(analysisContext)
|
||||
}
|
||||
|
||||
private fun areTypesCompatible(a: KotlinType, b: KotlinType): Boolean {
|
||||
|
||||
+8
@@ -15,6 +15,9 @@ import org.jetbrains.kotlin.analysis.api.components.KtDeclarationRendererOptions
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.KtFe10PackageSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.KtFe10PsiDefaultPropertyGetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.KtFe10PsiDefaultPropertySetterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.KtFe10PsiDefaultSetterParameterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.KtFe10PsiSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.types.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.utils.KtFe10Renderer
|
||||
@@ -127,6 +130,11 @@ internal fun KtSymbol.getDescriptor(): DeclarationDescriptor? {
|
||||
return when (this) {
|
||||
is KtFe10PsiSymbol<*, *> -> descriptor
|
||||
is KtFe10DescSymbol<*> -> descriptor
|
||||
is KtFe10DescSyntheticFieldSymbol -> descriptor
|
||||
is KtFe10PsiDefaultPropertyGetterSymbol -> descriptor
|
||||
is KtFe10PsiDefaultSetterParameterSymbol -> descriptor
|
||||
is KtFe10PsiDefaultPropertySetterSymbol -> null
|
||||
is KtFe10DescDefaultPropertySetterSymbol -> null
|
||||
else -> unexpectedElementError("KtSymbol", this)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -34,11 +34,11 @@ import org.jetbrains.kotlin.psi.KtProperty
|
||||
import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
|
||||
class KtFe10PsiDefaultPropertyGetterSymbol(
|
||||
internal class KtFe10PsiDefaultPropertyGetterSymbol(
|
||||
private val propertyPsi: KtProperty,
|
||||
override val analysisContext: Fe10AnalysisContext
|
||||
) : KtPropertyGetterSymbol(), KtFe10Symbol {
|
||||
private val descriptor: PropertyGetterDescriptor? by cached {
|
||||
val descriptor: PropertyGetterDescriptor? by cached {
|
||||
val bindingContext = analysisContext.analyze(propertyPsi, Fe10AnalysisFacade.AnalysisMode.PARTIAL)
|
||||
(bindingContext[BindingContext.VARIABLE, propertyPsi] as? PropertyDescriptor)?.getter
|
||||
}
|
||||
|
||||
+2
-2
@@ -35,11 +35,11 @@ import org.jetbrains.kotlin.psi.KtProperty
|
||||
import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
|
||||
class KtFe10PsiDefaultPropertySetterSymbol(
|
||||
internal class KtFe10PsiDefaultPropertySetterSymbol(
|
||||
private val propertyPsi: KtProperty,
|
||||
override val analysisContext: Fe10AnalysisContext
|
||||
) : KtPropertySetterSymbol(), KtFe10Symbol {
|
||||
private val descriptor: PropertySetterDescriptor? by cached {
|
||||
val descriptor: PropertySetterDescriptor? by cached {
|
||||
val bindingContext = analysisContext.analyze(propertyPsi, Fe10AnalysisFacade.AnalysisMode.PARTIAL)
|
||||
(bindingContext[BindingContext.VARIABLE, propertyPsi] as? PropertyDescriptor)?.setter
|
||||
}
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ internal class KtFe10PsiDefaultSetterParameterSymbol(
|
||||
private val accessorPsi: KtPropertyAccessor,
|
||||
override val analysisContext: Fe10AnalysisContext
|
||||
) : KtValueParameterSymbol(), KtFe10Symbol {
|
||||
private val descriptor: VariableDescriptor? by cached {
|
||||
val descriptor: VariableDescriptor? by cached {
|
||||
val bindingContext = analysisContext.analyze(accessorPsi, AnalysisMode.PARTIAL)
|
||||
bindingContext[BindingContext.PROPERTY_ACCESSOR, accessorPsi]?.valueParameters?.single()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user