From d5e26bcf9ee19c3e5048bcb881a7595c0a891169 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Thu, 28 Oct 2021 22:54:17 +0900 Subject: [PATCH] [FIR IDE] Refactoring, introduce Fe10AnalysisContext.builtIns --- .../api/descriptors/Fe10AnalysisFacade.kt | 4 +++ .../KtFe10ExpressionTypeProvider.kt | 12 +++---- .../components/KtFe10TypeProvider.kt | 34 +++++++++---------- .../KtFe10DescDefaultPropertySetterSymbol.kt | 3 +- .../KtFe10DescPropertySetterSymbol.kt | 3 +- .../KtFe10PsiDefaultPropertySetterSymbol.kt | 3 +- .../api/descriptors/utils/KtFe10Renderer.kt | 4 +-- 7 files changed, 29 insertions(+), 34 deletions(-) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/Fe10AnalysisFacade.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/Fe10AnalysisFacade.kt index b8c62c645f3..4479ad412b2 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/Fe10AnalysisFacade.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/Fe10AnalysisFacade.kt @@ -10,6 +10,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver @@ -43,4 +44,7 @@ class Fe10AnalysisContext( ) : Fe10AnalysisFacade by facade { val resolveSession: ResolveSession = getResolveSession(contextElement) val deprecationResolver: DeprecationResolver = getDeprecationResolver(contextElement) + + val builtIns: KotlinBuiltIns + get() = resolveSession.moduleDescriptor.builtIns } \ No newline at end of file diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ExpressionTypeProvider.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ExpressionTypeProvider.kt index 19078356ceb..550ac367e1d 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ExpressionTypeProvider.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ExpressionTypeProvider.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.bas import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.withValidityAssertion -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.lexer.KtTokens @@ -51,9 +50,6 @@ class KtFe10ExpressionTypeProvider( override val token: ValidityToken get() = analysisSession.token - private val builtIns: KotlinBuiltIns - get() = analysisContext.resolveSession.moduleDescriptor.builtIns - override fun getKtExpressionType(expression: KtExpression): KtType? = withValidityAssertion { // Not sure if it's safe enough. In theory, some annotations on expressions might change its type val unwrapped = expression.unwrapParenthesesLabelsAndAnnotations() as? KtExpression ?: return null @@ -62,7 +58,7 @@ class KtFe10ExpressionTypeProvider( } val bindingContext = analysisContext.analyze(unwrapped, AnalysisMode.PARTIAL) - val kotlinType = expression.getType(bindingContext) ?: builtIns.unitType + val kotlinType = expression.getType(bindingContext) ?: analysisContext.builtIns.unitType return kotlinType.toKtType(analysisContext) } @@ -104,7 +100,7 @@ class KtFe10ExpressionTypeProvider( return kotlinType.toKtType(analysisContext) } - return builtIns.unitType.toKtType(analysisContext) + return analysisContext.builtIns.unitType.toKtType(analysisContext) } override fun getFunctionalTypeForKtFunction(declaration: KtFunction): KtType = withValidityAssertion { @@ -119,8 +115,8 @@ class KtFe10ExpressionTypeProvider( val parameterCount = declaration.valueParameters.size + (if (declaration.isExtensionDeclaration()) 1 else 0) val function = when { - declaration.hasModifier(KtTokens.SUSPEND_KEYWORD) -> builtIns.getSuspendFunction(parameterCount) - else -> builtIns.getFunction(parameterCount) + declaration.hasModifier(KtTokens.SUSPEND_KEYWORD) -> analysisContext.builtIns.getSuspendFunction(parameterCount) + else -> analysisContext.builtIns.getFunction(parameterCount) } val errorMessage = "Descriptor not found for function \"${declaration.name}\"" 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 418c946d6c7..3bd4dc170d2 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 @@ -48,7 +48,7 @@ internal class KtFe10TypeProvider( @Suppress("SpellCheckingInspection") private val typeApproximator by lazy { TypeApproximator( - analysisContext.resolveSession.moduleDescriptor.builtIns, + analysisContext.builtIns, analysisContext.resolveSession.languageVersionSettings ) } @@ -405,51 +405,49 @@ private class KtFe10BuiltinTypes(private val analysisContext: Fe10AnalysisContex override val token: ValidityToken get() = analysisContext.token - private val builtIns = analysisContext.resolveSession.moduleDescriptor.builtIns - override val INT: KtType - get() = withValidityAssertion { builtIns.intType.toKtType(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.intType.toKtType(analysisContext) } override val LONG: KtType - get() = withValidityAssertion { builtIns.longType.toKtType(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.longType.toKtType(analysisContext) } override val SHORT: KtType - get() = withValidityAssertion { builtIns.shortType.toKtType(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.shortType.toKtType(analysisContext) } override val BYTE: KtType - get() = withValidityAssertion { builtIns.byteType.toKtType(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.byteType.toKtType(analysisContext) } override val FLOAT: KtType - get() = withValidityAssertion { builtIns.floatType.toKtType(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.floatType.toKtType(analysisContext) } override val DOUBLE: KtType - get() = withValidityAssertion { builtIns.doubleType.toKtType(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.doubleType.toKtType(analysisContext) } override val BOOLEAN: KtType - get() = withValidityAssertion { builtIns.booleanType.toKtType(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.booleanType.toKtType(analysisContext) } override val CHAR: KtType - get() = withValidityAssertion { builtIns.charType.toKtType(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.charType.toKtType(analysisContext) } override val STRING: KtType - get() = withValidityAssertion { builtIns.stringType.toKtType(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.stringType.toKtType(analysisContext) } override val UNIT: KtType - get() = withValidityAssertion { builtIns.unitType.toKtType(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.unitType.toKtType(analysisContext) } override val NOTHING: KtType - get() = withValidityAssertion { builtIns.nothingType.toKtType(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.nothingType.toKtType(analysisContext) } override val ANY: KtType - get() = withValidityAssertion { builtIns.anyType.toKtType(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.anyType.toKtType(analysisContext) } override val THROWABLE: KtType - get() = withValidityAssertion { builtIns.throwable.defaultType.toKtType(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.throwable.defaultType.toKtType(analysisContext) } override val NULLABLE_ANY: KtType - get() = withValidityAssertion { builtIns.nullableAnyType.toKtType(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.nullableAnyType.toKtType(analysisContext) } override val NULLABLE_NOTHING: KtType - get() = withValidityAssertion { builtIns.nullableNothingType.toKtType(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.nullableNothingType.toKtType(analysisContext) } } \ No newline at end of file diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescDefaultPropertySetterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescDefaultPropertySetterSymbol.kt index 4df96d69941..c37cd754105 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescDefaultPropertySetterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescDefaultPropertySetterSymbol.kt @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns class KtFe10DescDefaultPropertySetterSymbol( private val propertyDescriptor: PropertyDescriptor, @@ -57,7 +56,7 @@ class KtFe10DescDefaultPropertySetterSymbol( get() = withValidityAssertion { null } override val annotatedType: KtTypeAndAnnotations - get() = withValidityAssertion { propertyDescriptor.builtIns.unitType.toKtTypeAndAnnotations(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.unitType.toKtTypeAndAnnotations(analysisContext) } override val origin: KtSymbolOrigin get() = withValidityAssertion { propertyDescriptor.getSymbolOrigin(analysisContext) } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertySetterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertySetterSymbol.kt index 4d51c7df975..099a4c4a0d1 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertySetterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertySetterSymbol.kt @@ -19,14 +19,13 @@ import org.jetbrains.kotlin.descriptors.PropertySetterDescriptor import org.jetbrains.kotlin.descriptors.SyntheticPropertyDescriptor import org.jetbrains.kotlin.descriptors.hasBody import org.jetbrains.kotlin.name.CallableId -import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns internal class KtFe10DescPropertySetterSymbol( override val descriptor: PropertySetterDescriptor, override val analysisContext: Fe10AnalysisContext ) : KtPropertySetterSymbol(), KtFe10DescMemberSymbol { override val annotatedType: KtTypeAndAnnotations - get() = withValidityAssertion { descriptor.builtIns.unitType.toKtTypeAndAnnotations(analysisContext) } + get() = withValidityAssertion { analysisContext.builtIns.unitType.toKtTypeAndAnnotations(analysisContext) } override val isDefault: Boolean get() = withValidityAssertion { descriptor.isDefault } 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 5e00d1f380d..ffbab2402cf 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 @@ -81,8 +81,7 @@ class KtFe10PsiDefaultPropertySetterSymbol( override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion { - val builtIns = analysisContext.resolveSession.moduleDescriptor.builtIns - return builtIns.unitType.toKtTypeAndAnnotations(analysisContext) + return analysisContext.builtIns.unitType.toKtTypeAndAnnotations(analysisContext) } override val receiverType: KtTypeAndAnnotations? diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10Renderer.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10Renderer.kt index 88360e58547..b9d21bce315 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10Renderer.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10Renderer.kt @@ -68,7 +68,7 @@ internal class KtFe10Renderer( private val typeRenderer = KtFe10TypeRenderer(options.typeRendererOptions, isDebugText) private val typeApproximator = TypeApproximator( - analysisContext.resolveSession.moduleDescriptor.builtIns, + analysisContext.builtIns, analysisContext.resolveSession.languageVersionSettings ) @@ -96,7 +96,7 @@ internal class KtFe10Renderer( if (shouldApproximate) { val approximatedType = typeApproximator.approximateToSuperType(type.unwrap(), PublicApproximatorConfiguration) ?: type.takeIf { it.constructor.declarationDescriptor?.name != SpecialNames.NO_NAME_PROVIDED } - ?: analysisContext.resolveSession.moduleDescriptor.builtIns.anyType + ?: analysisContext.builtIns.anyType renderType(approximatedType, shouldApproximate = false) return