From c0e713980b5e93d61688c247e7ed0363e252d3b5 Mon Sep 17 00:00:00 2001 From: Pavel Kirpichenkov Date: Wed, 5 Aug 2020 12:14:37 +0300 Subject: [PATCH] Add helpers for getting commonly used services without an opt-in These services are LanguageVersionSettings, DataFlowValueFactory #KT-39643 Fixed --- .../introduce/ExtractableSubstringInfo.kt | 8 ++----- .../idea/resolve/frontendServiceHelpers.kt | 24 +++++++++++++++++++ .../jetbrains/kotlin/idea/util/CallType.kt | 9 +++---- .../idea/util/ShadowedDeclarationsFilter.kt | 10 ++++---- .../kotlin/idea/core/SmartCastCalculator.kt | 6 ++--- .../org/jetbrains/kotlin/idea/core/Utils.kt | 9 ++++--- .../kotlin/idea/core/psiModificationUtils.kt | 3 ++- .../KotlinExpressionTypeProvider.kt | 7 ++---- ...formExtensionReceiverOfInlineInspection.kt | 7 ++---- .../RedundantRequireNotNullCallInspection.kt | 6 ++--- ...ReplaceCallWithBinaryOperatorInspection.kt | 6 ++--- .../UsePropertyAccessSyntaxIntention.kt | 8 ++++--- .../branchedTransformations/IfThenUtils.kt | 8 ++----- .../kotlin/idea/quickfix/ExclExclCallFixes.kt | 7 ++---- .../ReplaceWithAnnotationAnalyzer.kt | 3 ++- .../extractionEngine/ExtractionData.kt | 7 ++---- .../extractionEngine/inferParameterInfo.kt | 7 ++---- .../idea/util/ImportInsertHelperImpl.kt | 7 ++---- .../kotlin/idea/util/quickfixUtil.kt | 6 ++--- .../AbstractMultiModuleIdeResolveTest.kt | 9 ++++--- .../NullabilityBoundTypeEnhancer.kt | 7 ++---- 21 files changed, 80 insertions(+), 84 deletions(-) create mode 100644 idea/ide-common/src/org/jetbrains/kotlin/idea/resolve/frontendServiceHelpers.kt diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractableSubstringInfo.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractableSubstringInfo.kt index ea479b576c7..b586a5e1832 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractableSubstringInfo.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractableSubstringInfo.kt @@ -9,10 +9,9 @@ import com.intellij.openapi.util.Key import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiElement import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.analysis.analyzeInContext import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.resolve.getLanguageVersionSettings import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset @@ -45,10 +44,7 @@ class ExtractableSubstringInfo( val tempContext = expr.analyzeInContext(scope, template) val trace = DelegatingBindingTrace(tempContext, "Evaluate '$literal'") - - @OptIn(FrontendInternals::class) - val languageVersionSettings = facade.getFrontendService(LanguageVersionSettings::class.java) - + val languageVersionSettings = facade.getLanguageVersionSettings() val value = ConstantExpressionEvaluator(module, languageVersionSettings, facade.project).evaluateExpression(expr, trace) if (value == null || value.isError) return stringType diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/resolve/frontendServiceHelpers.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/resolve/frontendServiceHelpers.kt new file mode 100644 index 00000000000..b356ba2ea91 --- /dev/null +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/resolve/frontendServiceHelpers.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.resolve + +import org.jetbrains.kotlin.config.LanguageVersionSettings +import org.jetbrains.kotlin.idea.FrontendInternals +import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory + +/** + * Helper methods for commonly used frontend components. + * Use them to avoid explicit opt-ins. + * Before adding a new helper method please make sure component doesn't have fragile invariants that can be violated by external use. + */ + +@OptIn(FrontendInternals::class) +fun ResolutionFacade.getLanguageVersionSettings(): LanguageVersionSettings = + frontendService() + +@OptIn(FrontendInternals::class) +fun ResolutionFacade.getDataFlowValueFactory(): DataFlowValueFactory = + frontendService() diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt index 11c9bb9e6ee..a3bbaedede7 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt @@ -12,6 +12,8 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory +import org.jetbrains.kotlin.idea.resolve.getLanguageVersionSettings import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getReceiverExpression @@ -252,8 +254,7 @@ fun CallTypeAndReceiver<*, *>.receiverTypesWithIndex( stableSmartCastsOnly: Boolean, withImplicitReceiversWhenExplicitPresent: Boolean = false ): List? { - @OptIn(FrontendInternals::class) - val languageVersionSettings = resolutionFacade.frontendService() + val languageVersionSettings = resolutionFacade.getLanguageVersionSettings() val receiverExpression: KtExpression? when (this) { @@ -356,8 +357,8 @@ private fun receiverValueTypes( stableSmartCastsOnly: Boolean, resolutionFacade: ResolutionFacade ): List { - val languageVersionSettings = resolutionFacade.frontendService() - val dataFlowValueFactory = resolutionFacade.frontendService() + val languageVersionSettings = resolutionFacade.getLanguageVersionSettings() + val dataFlowValueFactory = resolutionFacade.getDataFlowValueFactory() val smartCastManager = resolutionFacade.frontendService() val dataFlowValue = dataFlowValueFactory.createDataFlowValue(receiverValue, bindingContext, moduleDescriptor) return if (dataFlowValue.isStable || !stableSmartCastsOnly) { // we don't include smart cast receiver types for "unstable" receiver value to mark members grayed diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ShadowedDeclarationsFilter.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ShadowedDeclarationsFilter.kt index 895c20c8107..41b3af83645 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ShadowedDeclarationsFilter.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ShadowedDeclarationsFilter.kt @@ -11,6 +11,8 @@ import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory +import org.jetbrains.kotlin.idea.resolve.getLanguageVersionSettings import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DelegatingBindingTrace @@ -19,7 +21,6 @@ import org.jetbrains.kotlin.resolve.calls.CallResolver import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext import org.jetbrains.kotlin.resolve.calls.context.CheckArgumentTypesMode import org.jetbrains.kotlin.resolve.calls.context.ContextDependency -import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.resolve.scopes.ExplicitImportsScope import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue @@ -97,7 +98,6 @@ class ShadowedDeclarationsFilter( private fun packageName(descriptor: DeclarationDescriptor) = descriptor.importableFqName?.parent() - @OptIn(FrontendInternals::class) private fun filterEqualSignatureGroup( descriptors: Collection, descriptorsToImport: Collection = emptyList() @@ -194,9 +194,11 @@ class ShadowedDeclarationsFilter( val context = BasicCallResolutionContext.create( bindingTrace, scope, newCall, TypeUtils.NO_EXPECTED_TYPE, dataFlowInfo, ContextDependency.INDEPENDENT, CheckArgumentTypesMode.CHECK_VALUE_ARGUMENTS, - false, /* languageVersionSettings */ resolutionFacade.frontendService(), - resolutionFacade.frontendService() + false, resolutionFacade.getLanguageVersionSettings(), + resolutionFacade.getDataFlowValueFactory() ) + + @OptIn(FrontendInternals::class) val callResolver = resolutionFacade.frontendService() val results = if (isFunction) callResolver.resolveFunctionCall(context) else callResolver.resolveSimpleProperty(context) val resultingDescriptors = results.resultingCalls.map { it.resultingDescriptor } diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/SmartCastCalculator.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/SmartCastCalculator.kt index 33c76e2aad7..4648fdff714 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/SmartCastCalculator.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/SmartCastCalculator.kt @@ -10,9 +10,8 @@ import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor import org.jetbrains.kotlin.descriptors.VariableDescriptor -import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.resolve.ResolutionFacade -import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory import org.jetbrains.kotlin.idea.util.getImplicitReceiversWithInstance import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.psi.KtExpression @@ -35,8 +34,7 @@ class SmartCastCalculator( receiver: KtExpression?, resolutionFacade: ResolutionFacade ) { - @OptIn(FrontendInternals::class) - private val dataFlowValueFactory = resolutionFacade.frontendService() + private val dataFlowValueFactory = resolutionFacade.getDataFlowValueFactory() // keys are VariableDescriptor's and ThisReceiver's private val entityToSmartCastInfo: Map = processDataFlowInfo( diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/Utils.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/Utils.kt index 07fe67d2587..b01f70fae0c 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/Utils.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/Utils.kt @@ -16,6 +16,8 @@ import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.references.resolveToDescriptors import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory +import org.jetbrains.kotlin.idea.resolve.getLanguageVersionSettings import org.jetbrains.kotlin.idea.util.getImplicitReceiversWithInstanceToExpression import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.name.FqName @@ -101,7 +103,6 @@ fun KtImportDirective.targetDescriptors(resolutionFacade: ResolutionFacade = thi return nameExpression.mainReference.resolveToDescriptors(resolutionFacade.analyze(nameExpression)) } -@OptIn(FrontendInternals::class) fun Call.resolveCandidates( bindingContext: BindingContext, resolutionFacade: ResolutionFacade, @@ -117,9 +118,11 @@ fun Call.resolveCandidates( val callResolutionContext = BasicCallResolutionContext.create( bindingTrace, resolutionScope, this, expectedType, dataFlowInfo, ContextDependency.INDEPENDENT, CheckArgumentTypesMode.CHECK_VALUE_ARGUMENTS, - false, resolutionFacade.frontendService(), - resolutionFacade.frontendService() + false, resolutionFacade.getLanguageVersionSettings(), + resolutionFacade.getDataFlowValueFactory() ).replaceCollectAllCandidates(true) + + @OptIn(FrontendInternals::class) val callResolver = resolutionFacade.frontendService() val results = callResolver.resolveFunctionCall(callResolutionContext) diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt index 87dcb309236..8e6c6f2899b 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getLanguageVersionSettings import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.idea.util.hasJvmFieldAnnotation import org.jetbrains.kotlin.idea.util.isExpectDeclaration @@ -127,7 +128,7 @@ fun KtCallExpression.canMoveLambdaOutsideParentheses(): Boolean { val resolutionFacade = getResolutionFacade() val samConversionTransformer = resolutionFacade.frontendService() val samConversionOracle = resolutionFacade.frontendService() - val languageVersionSettings = resolutionFacade.frontendService() + val languageVersionSettings = resolutionFacade.getLanguageVersionSettings() val bindingContext = analyze(resolutionFacade, BodyResolveMode.PARTIAL) val targets = bindingContext[BindingContext.REFERENCE_TARGET, callee]?.let { listOf(it) } diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinExpressionTypeProvider.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinExpressionTypeProvider.kt index f3b2e0a5290..93b90c8be13 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinExpressionTypeProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinExpressionTypeProvider.kt @@ -13,14 +13,13 @@ import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.ClassifierDescriptor -import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.references.mainReference -import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelector import org.jetbrains.kotlin.psi.psiUtil.parents @@ -35,7 +34,6 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getParameterForArgument import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.callUtil.getType import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo -import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.expressions.typeInfoFactory.noTypeInfo @@ -114,8 +112,7 @@ class KotlinExpressionTypeProvider : ExpressionTypeProvider() { val result = expressionType?.let { typeRenderer.renderType(it) } ?: return KotlinBundle.message("type.provider.unknown.type") - @OptIn(FrontendInternals::class) - val dataFlowValueFactory = element.getResolutionFacade().frontendService() + val dataFlowValueFactory = element.getResolutionFacade().getDataFlowValueFactory() val dataFlowValue = dataFlowValueFactory.createDataFlowValue(element, expressionType, bindingContext, element.findModuleDescriptor()) val types = expressionTypeInfo.dataFlowInfo.getStableTypes(dataFlowValue, element.languageVersionSettings) diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/PlatformExtensionReceiverOfInlineInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/PlatformExtensionReceiverOfInlineInspection.kt index 80156017267..2b0436ec83f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/PlatformExtensionReceiverOfInlineInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/PlatformExtensionReceiverOfInlineInspection.kt @@ -16,18 +16,17 @@ import com.intellij.ui.EditorTextField import org.intellij.lang.regexp.RegExpFileType import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.quickfix.AddExclExclCallFix +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtDotQualifiedExpression import org.jetbrains.kotlin.psi.KtVisitorVoid import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfoBefore import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall -import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.isNullabilityFlexible import org.jetbrains.kotlin.types.isNullable @@ -74,9 +73,7 @@ class PlatformExtensionReceiverOfInlineInspection : AbstractKotlinInspection() { if (!descriptor.isInline || descriptor.extensionReceiverParameter?.type?.isNullable() == true) return val receiverExpression = expression.receiverExpression - - @OptIn(FrontendInternals::class) - val dataFlowValueFactory = resolutionFacade.getFrontendService(DataFlowValueFactory::class.java) + val dataFlowValueFactory = resolutionFacade.getDataFlowValueFactory() val dataFlow = dataFlowValueFactory.createDataFlowValue(receiverExpression, extensionReceiverType, context, descriptor) val stableNullability = context.getDataFlowInfoBefore(receiverExpression).getStableNullability(dataFlow) if (!stableNullability.canBeNull()) return diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantRequireNotNullCallInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantRequireNotNullCallInspection.kt index 1f9186d3d10..453ce01b79e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantRequireNotNullCallInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantRequireNotNullCallInspection.kt @@ -11,13 +11,13 @@ import com.intellij.codeInspection.ProblemHighlightType import com.intellij.codeInspection.ProblemsHolder import com.intellij.openapi.project.Project import org.jetbrains.kotlin.descriptors.CallableDescriptor -import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.inspections.collections.isCalling import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.resolve.ResolutionFacade +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtReferenceExpression @@ -29,7 +29,6 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfoBefore import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall -import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.isNullable @@ -57,7 +56,6 @@ class RedundantRequireNotNullCallInspection : AbstractKotlinInspection() { ) }) - @OptIn(FrontendInternals::class) private fun KtReferenceExpression.isNullable( descriptor: CallableDescriptor, type: KotlinType, @@ -65,7 +63,7 @@ class RedundantRequireNotNullCallInspection : AbstractKotlinInspection() { resolutionFacade: ResolutionFacade, ): Boolean { if (!type.isNullable()) return false - val dataFlowValueFactory = resolutionFacade.getFrontendService(DataFlowValueFactory::class.java) + val dataFlowValueFactory = resolutionFacade.getDataFlowValueFactory() val dataFlow = dataFlowValueFactory.createDataFlowValue(this, type, context, descriptor) val stableTypes = context.getDataFlowInfoBefore(this).getStableTypes(dataFlow, this.languageVersionSettings) return stableTypes.none { !it.isNullable() } diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt index 9e853f65a9f..8e51c693d21 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt @@ -23,7 +23,6 @@ import com.intellij.psi.PsiElement import com.intellij.psi.tree.IElementType import org.jetbrains.kotlin.cfg.pseudocode.containingDeclarationForPseudocode import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.analysis.analyzeAsReplacement import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.analyze @@ -38,6 +37,7 @@ import org.jetbrains.kotlin.idea.intentions.isOperatorOrCompatible import org.jetbrains.kotlin.idea.intentions.isReceiverExpressionWithValue import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.project.platform +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory import org.jetbrains.kotlin.idea.util.calleeTextRangeInThis import org.jetbrains.kotlin.lexer.KtSingleValueToken import org.jetbrains.kotlin.lexer.KtTokens @@ -50,7 +50,6 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.callUtil.getType import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch import org.jetbrains.kotlin.resolve.calls.model.isReallySuccess -import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.resolve.calls.smartcasts.getKotlinTypeWithPossibleSmartCastToFP import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.KotlinType @@ -202,13 +201,12 @@ class ReplaceCallWithBinaryOperatorInspection : AbstractApplicabilityBasedInspec } } - @OptIn(FrontendInternals::class) private fun KtDotQualifiedExpression.isFloatingPointNumberEquals(): Boolean { val resolvedCall = resolveToCall() ?: return false val resolutionFacade = getResolutionFacade() val context = analyze(resolutionFacade, BodyResolveMode.PARTIAL) val declarationDescriptor = containingDeclarationForPseudocode?.resolveToDescriptorIfAny() - val dataFlowValueFactory = resolutionFacade.getFrontendService(DataFlowValueFactory::class.java) + val dataFlowValueFactory = resolutionFacade.getDataFlowValueFactory() val defaultType: (KotlinType, Set) -> KotlinType = { givenType, stableTypes -> stableTypes.firstOrNull() ?: givenType } val receiverType = resolvedCall.getReceiverExpression()?.getKotlinTypeWithPossibleSmartCastToFP( context, declarationDescriptor, languageVersionSettings, dataFlowValueFactory, defaultType diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/UsePropertyAccessSyntaxIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/UsePropertyAccessSyntaxIntention.kt index add8ee67bab..6beb57c0474 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/UsePropertyAccessSyntaxIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/UsePropertyAccessSyntaxIntention.kt @@ -27,6 +27,8 @@ import org.jetbrains.kotlin.idea.core.replaced import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory +import org.jetbrains.kotlin.idea.resolve.getLanguageVersionSettings import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.idea.util.shouldNotConvertToProperty @@ -224,7 +226,6 @@ class UsePropertyAccessSyntaxIntention : SelfTargetingOffsetIndependentIntention return property.name } - @OptIn(FrontendInternals::class) private fun checkWillResolveToProperty( resolvedCall: ResolvedCall, property: SyntheticJavaPropertyDescriptor, @@ -248,10 +249,11 @@ class UsePropertyAccessSyntaxIntention : SelfTargetingOffsetIndependentIntention val context = BasicCallResolutionContext.create( bindingTrace, resolutionScope, newCall, expectedType, dataFlowInfo, ContextDependency.INDEPENDENT, CheckArgumentTypesMode.CHECK_VALUE_ARGUMENTS, - false, facade.frontendService(), - facade.frontendService() + false, facade.getLanguageVersionSettings(), + facade.getDataFlowValueFactory() ) + @OptIn(FrontendInternals::class) val callResolver = facade.frontendService() val result = callResolver.resolveSimpleProperty(context) return result.isSuccess && result.resultingDescriptor.original == property diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt index 67d6509a22b..f7532c08e2f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt @@ -8,12 +8,10 @@ package org.jetbrains.kotlin.idea.intentions.branchedTransformations import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.TransactionGuard import com.intellij.openapi.editor.Editor -import com.intellij.openapi.fileEditor.FileDocumentManager import com.intellij.openapi.util.TextRange import com.intellij.psi.search.LocalSearchScope import com.intellij.psi.search.searches.ReferencesSearch import org.jetbrains.kotlin.KtNodeTypes -import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade @@ -25,7 +23,7 @@ import org.jetbrains.kotlin.idea.intentions.replaceFirstReceiver import org.jetbrains.kotlin.idea.refactoring.inline.KotlinInlineValHandler import org.jetbrains.kotlin.idea.refactoring.introduce.introduceVariable.KotlinIntroduceVariableHandler import org.jetbrains.kotlin.idea.references.mainReference -import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.idea.util.textRangeIn import org.jetbrains.kotlin.incremental.components.NoLookupLocation @@ -41,7 +39,6 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getType import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.getExplicitReceiverValue import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.getImplicitReceiverValue import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValue -import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver import org.jetbrains.kotlin.resolve.scopes.utils.findVariable import org.jetbrains.kotlin.types.TypeUtils @@ -194,10 +191,9 @@ fun KtExpression.isStableVal(context: BindingContext = this.analyze()): Boolean fun elvisPattern(newLine: Boolean): String = if (newLine) "$0\n?: $1" else "$0 ?: $1" -@OptIn(FrontendInternals::class) private fun KtExpression.toDataFlowValue(context: BindingContext): DataFlowValue? { val expressionType = this.getType(context) ?: return null - val dataFlowValueFactory = this.getResolutionFacade().frontendService() + val dataFlowValueFactory = this.getResolutionFacade().getDataFlowValueFactory() return dataFlowValueFactory.createDataFlowValue(this, expressionType, context, findModuleDescriptor()) } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt index 79553a5eb77..8f33e80febf 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ExclExclCallFixes.kt @@ -30,20 +30,18 @@ import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.diagnostics.Errors.UNSAFE_CALL -import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.intentions.branchedTransformations.isNullExpression -import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.getImplicitReceiverValue -import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver import org.jetbrains.kotlin.types.TypeUtils @@ -139,8 +137,7 @@ class AddExclExclCallFix(psiElement: PsiElement, val checkImplicitReceivers: Boo context[BindingContext.EXPRESSION_TYPE_INFO, psiElement]?.let { val type = it.type - @OptIn(FrontendInternals::class) - val dataFlowValueFactory = psiElement.getResolutionFacade().frontendService() + val dataFlowValueFactory = psiElement.getResolutionFacade().getDataFlowValueFactory() if (type != null) { val nullability = it.dataFlowInfo.getStableNullability( diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/ReplaceWithAnnotationAnalyzer.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/ReplaceWithAnnotationAnalyzer.kt index 64f7b2f3058..f2ec2281b6d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/ReplaceWithAnnotationAnalyzer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/ReplaceWithAnnotationAnalyzer.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getLanguageVersionSettings import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqNameUnsafe import org.jetbrains.kotlin.platform.TargetPlatform @@ -130,7 +131,7 @@ object ReplaceWithAnnotationAnalyzer { ): LexicalScope? { val module = resolutionFacade.moduleDescriptor val explicitImportsScope = buildExplicitImportsScope(annotation, resolutionFacade, module) - val languageVersionSettings = resolutionFacade.frontendService() + val languageVersionSettings = resolutionFacade.getLanguageVersionSettings() val defaultImportsScopes = buildDefaultImportsScopes(resolutionFacade, module, languageVersionSettings) return getResolutionScope( diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt index fd74d2cd418..469f196cf36 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt @@ -24,7 +24,6 @@ import com.intellij.psi.PsiNameIdentifierOwner import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor -import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde @@ -33,7 +32,7 @@ import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.refactoring.introduce.ExtractableSubstringInfo import org.jetbrains.kotlin.idea.refactoring.introduce.extractableSubstringInfo import org.jetbrains.kotlin.idea.refactoring.introduce.substringContextOrThis -import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.idea.util.psi.patternMatching.KotlinPsiRange @@ -48,7 +47,6 @@ import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCall import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.getImplicitReceiverValue import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.hasBothReceivers -import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.resolve.calls.tasks.isSynthesizedInvoke import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor @@ -184,8 +182,7 @@ data class ExtractionData( } private fun getPossibleTypes(expression: KtExpression, resolvedCall: ResolvedCall<*>?, context: BindingContext): Set { - @OptIn(FrontendInternals::class) - val dataFlowValueFactory = expression.getResolutionFacade().frontendService() + val dataFlowValueFactory = expression.getResolutionFacade().getDataFlowValueFactory() val dataFlowInfo = context.getDataFlowInfoAfter(expression) resolvedCall?.getImplicitReceiverValue()?.let { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/inferParameterInfo.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/inferParameterInfo.kt index 530251b4e3c..6bacf656205 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/inferParameterInfo.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/inferParameterInfo.kt @@ -27,13 +27,12 @@ import org.jetbrains.kotlin.cfg.pseudocode.getExpectedTypePredicate import org.jetbrains.kotlin.cfg.pseudocode.instructions.eval.InstructionWithReceivers import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations -import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.core.KotlinNameSuggester import org.jetbrains.kotlin.idea.core.NewDeclarationNameValidator import org.jetbrains.kotlin.idea.project.languageVersionSettings -import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.lexer.KtToken import org.jetbrains.kotlin.psi.* @@ -387,9 +386,7 @@ private fun suggestParameterType( val typeByDataFlowInfo = if (useSmartCastsIfPossible) { val callElement = resolvedCall!!.call.callElement val dataFlowInfo = bindingContext.getDataFlowInfoAfter(callElement) - - @OptIn(FrontendInternals::class) - val dataFlowValueFactory = callElement.getResolutionFacade().frontendService() + val dataFlowValueFactory = callElement.getResolutionFacade().getDataFlowValueFactory() val possibleTypes = dataFlowInfo.getCollectedTypes( dataFlowValueFactory.createDataFlowValueForStableReceiver(receiverToExtract), callElement.languageVersionSettings diff --git a/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt b/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt index de5967ddc9e..dcb3f072b01 100644 --- a/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt +++ b/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt @@ -7,9 +7,7 @@ package org.jetbrains.kotlin.idea.util import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.core.formatter.KotlinCodeStyleSettings import org.jetbrains.kotlin.idea.core.targetDescriptors @@ -18,7 +16,7 @@ import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.idea.project.findAnalyzerServices import org.jetbrains.kotlin.idea.refactoring.fqName.isImported -import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getLanguageVersionSettings import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name @@ -47,9 +45,8 @@ class ImportInsertHelperImpl(private val project: Project) : ImportInsertHelper( override val importSortComparator: Comparator get() = ImportPathComparator(codeStyleSettings.PACKAGES_IMPORT_LAYOUT) - @OptIn(FrontendInternals::class) override fun isImportedWithDefault(importPath: ImportPath, contextFile: KtFile): Boolean { - val languageVersionSettings = contextFile.getResolutionFacade().frontendService() + val languageVersionSettings = contextFile.getResolutionFacade().getLanguageVersionSettings() val platform = TargetPlatformDetector.getPlatform(contextFile) val analyzerServices = platform.findAnalyzerServices(contextFile.project) val allDefaultImports = analyzerServices.getDefaultImports(languageVersionSettings, includeLowPriorityImports = true) diff --git a/idea/src/org/jetbrains/kotlin/idea/util/quickfixUtil.kt b/idea/src/org/jetbrains/kotlin/idea/util/quickfixUtil.kt index 42b2a94cdf7..1a657ab6f02 100644 --- a/idea/src/org/jetbrains/kotlin/idea/util/quickfixUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/util/quickfixUtil.kt @@ -19,20 +19,19 @@ package org.jetbrains.kotlin.idea.util import com.intellij.codeInsight.intention.IntentionAction import com.intellij.psi.PsiElement import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.quickfix.KotlinQuickFixAction import org.jetbrains.kotlin.idea.quickfix.KotlinSingleIntentionActionFactory import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtPrimaryConstructor import org.jetbrains.kotlin.psi.KtPsiFactory import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfoAfter -import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.utils.ifEmpty @@ -60,8 +59,7 @@ fun getDataFlowAwareTypes( if (originalType == null) return emptyList() val dataFlowInfo = bindingContext.getDataFlowInfoAfter(expression) - @OptIn(FrontendInternals::class) - val dataFlowValueFactory = expression.getResolutionFacade().frontendService() + val dataFlowValueFactory = expression.getResolutionFacade().getDataFlowValueFactory() val expressionType = bindingContext.getType(expression) ?: return listOf(originalType) val dataFlowValue = dataFlowValueFactory.createDataFlowValue( expression, expressionType, bindingContext, expression.getResolutionFacade().moduleDescriptor diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleIdeResolveTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleIdeResolveTest.kt index a2ac69202ba..52eedba72f1 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleIdeResolveTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleIdeResolveTest.kt @@ -14,10 +14,10 @@ import org.jetbrains.kotlin.checkers.BaseDiagnosticsTest import org.jetbrains.kotlin.checkers.utils.CheckerTestUtil import org.jetbrains.kotlin.checkers.utils.DiagnosticsRenderingConfiguration import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl -import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.multiplatform.setupMppProjectFromTextFile import org.jetbrains.kotlin.idea.project.KotlinMultiplatformAnalysisModeComponent -import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory +import org.jetbrains.kotlin.idea.resolve.getLanguageVersionSettings import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.test.allKotlinFiles @@ -71,7 +71,6 @@ abstract class AbstractMultiModuleIdeResolveTest : AbstractMultiModuleTest() { return testSourcePath.toFile() } - @OptIn(FrontendInternals::class) protected open fun checkFile(file: KtFile, expectedFile: File) { val resolutionFacade = file.getResolutionFacade() val (bindingContext, moduleDescriptor) = resolutionFacade.analyzeWithAllCompilerChecks(listOf(file)) @@ -87,9 +86,9 @@ abstract class AbstractMultiModuleIdeResolveTest : AbstractMultiModuleTest() { configuration = DiagnosticsRenderingConfiguration( platform = null, // we don't need to attach platform-description string to diagnostic here withNewInference = false, - languageVersionSettings = resolutionFacade.frontendService(), + languageVersionSettings = resolutionFacade.getLanguageVersionSettings(), ), - dataFlowValueFactory = resolutionFacade.frontendService(), + dataFlowValueFactory = resolutionFacade.getDataFlowValueFactory(), moduleDescriptor = moduleDescriptor as ModuleDescriptorImpl ).filter { diagnosticsFilter.value(it.diagnostic) } diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/inference/nullability/NullabilityBoundTypeEnhancer.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/inference/nullability/NullabilityBoundTypeEnhancer.kt index 32596eb337d..378b095add7 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/inference/nullability/NullabilityBoundTypeEnhancer.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/inference/nullability/NullabilityBoundTypeEnhancer.kt @@ -6,20 +6,18 @@ package org.jetbrains.kotlin.nj2k.inference.nullability import org.jetbrains.kotlin.descriptors.ConstructorDescriptor -import org.jetbrains.kotlin.idea.FrontendInternals import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.intentions.branchedTransformations.isNullExpression import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.resolve.ResolutionFacade -import org.jetbrains.kotlin.idea.resolve.frontendService +import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory import org.jetbrains.kotlin.nj2k.inference.common.* import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.callUtil.getType import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValue -import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.resolve.calls.smartcasts.Nullability import org.jetbrains.kotlin.resolve.jvm.checkers.mustNotBeNull import org.jetbrains.kotlin.types.KotlinType @@ -96,8 +94,7 @@ class NullabilityBoundTypeEnhancer(private val resolutionFacade: ResolutionFacad val bindingContext = analyze(resolutionFacade) val type = getType(bindingContext) ?: return null - @OptIn(FrontendInternals::class) - val dataFlowValue = resolutionFacade.frontendService() + val dataFlowValue = resolutionFacade.getDataFlowValueFactory() .createDataFlowValue(this, type, bindingContext, resolutionFacade.moduleDescriptor) val dataFlowInfo = bindingContext[BindingContext.EXPRESSION_TYPE_INFO, this]?.dataFlowInfo ?: return null return analyzer(dataFlowValue, dataFlowInfo, type)