diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10TypeProvider.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10TypeProvider.kt index 1304b99c770..614a70c8f08 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10TypeProvider.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10TypeProvider.kt @@ -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 { diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt index 318871043e2..047ef28ddf7 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt @@ -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) } } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiDefaultPropertyGetterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiDefaultPropertyGetterSymbol.kt index 4412654014a..89be4c3770c 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiDefaultPropertyGetterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiDefaultPropertyGetterSymbol.kt @@ -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 } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiDefaultPropertySetterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiDefaultPropertySetterSymbol.kt index 2e1004c69fd..393f2e2bbb0 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiDefaultPropertySetterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiDefaultPropertySetterSymbol.kt @@ -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 } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiDefaultSetterParameterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiDefaultSetterParameterSymbol.kt index 780712a7d89..4664a1b2b78 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiDefaultSetterParameterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiDefaultSetterParameterSymbol.kt @@ -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() }