diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueFactory.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueFactory.java index 4a406f1c27f..4f56be77be2 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueFactory.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/DataFlowValueFactory.java @@ -104,7 +104,7 @@ public class DataFlowValueFactory { } @NotNull - public static DataFlowValue createDataFlowValue(@NotNull ThisReceiver receiver) { + public static DataFlowValue createDataFlowValueForStableReceiver(@NotNull ReceiverValue receiver) { KotlinType type = receiver.getType(); return new DataFlowValue(receiver, type, STABLE_VALUE, getImmanentNullability(type)); } @@ -124,12 +124,11 @@ public class DataFlowValueFactory { @NotNull BindingContext bindingContext, @NotNull DeclarationDescriptor containingDeclarationOrModule ) { - if (receiverValue instanceof TransientReceiver || receiverValue instanceof ScriptReceiver) { - KotlinType type = receiverValue.getType(); - return new DataFlowValue(receiverValue, type, STABLE_VALUE, getImmanentNullability(type)); - } - else if (receiverValue instanceof ClassReceiver || receiverValue instanceof ExtensionReceiver) { - return createDataFlowValue((ThisReceiver) receiverValue); + if (receiverValue instanceof TransientReceiver || + receiverValue instanceof ScriptReceiver || + receiverValue instanceof ClassReceiver || + receiverValue instanceof ExtensionReceiver) { + return createDataFlowValueForStableReceiver(receiverValue); } else if (receiverValue instanceof ExpressionReceiver) { return createDataFlowValue(((ExpressionReceiver) receiverValue).getExpression(), 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 94854e2cd68..67ab581528a 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 @@ -178,7 +178,7 @@ data class ExtractionData( val typeInfo = context[BindingContext.EXPRESSION_TYPE_INFO, expression] ?: return emptySet() (resolvedCall?.getImplicitReceiverValue() as? ThisReceiver)?.let { - return typeInfo.dataFlowInfo.getPossibleTypes(DataFlowValueFactory.createDataFlowValue(it)) + return typeInfo.dataFlowInfo.getPossibleTypes(DataFlowValueFactory.createDataFlowValueForStableReceiver(it)) } val type = resolvedCall?.resultingDescriptor?.returnType ?: return emptySet() 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 4f33e65fb1e..9b9ef5beaba 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 @@ -281,7 +281,7 @@ private fun suggestParameterType( val calleeExpression = resolvedCall!!.call.calleeExpression val typeByDataFlowInfo = if (useSmartCastsIfPossible) { bindingContext[BindingContext.EXPRESSION_TYPE_INFO, calleeExpression]?.dataFlowInfo?.let { dataFlowInfo -> - val possibleTypes = dataFlowInfo.getPossibleTypes(DataFlowValueFactory.createDataFlowValue(receiverToExtract)) + val possibleTypes = dataFlowInfo.getPossibleTypes(DataFlowValueFactory.createDataFlowValueForStableReceiver(receiverToExtract)) if (possibleTypes.isNotEmpty()) CommonSupertypes.commonSupertype(possibleTypes) else null } } else null