[Invariant fix] Avoid using obsolete desciptors as scope content in change signature
After type refinement was introduced we sometimes may request some additional data from ModuleDescriptor But if it's been invalidated after first part of refactoring's been applied requesting content may fail (see ModuleDescriptorImpl::assertValid) See the test: org.jetbrains.kotlin.idea.refactoring.introduce.ExtractionTestGenerated.IntroduceLambdaParameter#testLambdaParamInPrimaryConstructor
This commit is contained in:
committed by
Dmitry Savvinov
parent
01f0589ddf
commit
5f10252185
+8
-2
@@ -73,6 +73,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.classId
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||
@@ -538,8 +539,13 @@ class KotlinChangeSignatureUsageProcessor : ChangeSignatureUsageProcessor {
|
||||
val containingDeclaration = oldDescriptor.containingDeclaration
|
||||
|
||||
val parametersScope = when {
|
||||
oldDescriptor is ConstructorDescriptor && containingDeclaration is ClassDescriptorWithResolutionScopes ->
|
||||
containingDeclaration.scopeForInitializerResolution
|
||||
oldDescriptor is ConstructorDescriptor && containingDeclaration is ClassDescriptorWithResolutionScopes -> {
|
||||
val classDescriptor = containingDeclaration.classId?.let {
|
||||
function.findModuleDescriptor().findClassAcrossModuleDependencies(it) as? ClassDescriptorWithResolutionScopes
|
||||
} ?: containingDeclaration
|
||||
|
||||
classDescriptor.scopeForInitializerResolution
|
||||
}
|
||||
function is KtFunction ->
|
||||
function.getBodyScope(bindingContext)
|
||||
else ->
|
||||
|
||||
Reference in New Issue
Block a user