From f1034dbf19cf1c84de632491afe8b65c5da65060 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 17 Nov 2015 10:39:41 +0300 Subject: [PATCH] Receiver refactoring in DataFlowValueFactory --- .../calls/smartcasts/DataFlowValueFactory.java | 13 ++++++------- .../introduce/extractionEngine/ExtractionData.kt | 2 +- .../extractionEngine/inferParameterInfo.kt | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) 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