diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createFunction/CreateFunctionOrPropertyFromCallActionFactory.kt b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createFunction/CreateFunctionOrPropertyFromCallActionFactory.kt index 7eb05faa945..9537aca2f88 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createFunction/CreateFunctionOrPropertyFromCallActionFactory.kt +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createFunction/CreateFunctionOrPropertyFromCallActionFactory.kt @@ -22,6 +22,7 @@ import org.jetbrains.jet.plugin.refactoring.getExtractionContainers import org.jetbrains.jet.lang.psi.JetClassBody import org.jetbrains.jet.lang.psi.JetFile import org.jetbrains.jet.lang.psi.psiUtil.getAssignmentByLHS +import org.jetbrains.jet.lang.resolve.BindingContext object CreateFunctionOrPropertyFromCallActionFactory : JetSingleIntentionActionFactory() { override fun createAction(diagnostic: Diagnostic): IntentionAction? { @@ -55,9 +56,9 @@ object CreateFunctionOrPropertyFromCallActionFactory : JetSingleIntentionActionF val receiverType = when (receiver) { ReceiverValue.NO_RECEIVER -> TypeInfo.Empty - is Qualifier -> when { - receiver.classifier != null -> TypeInfo(receiver.expression, Variance.IN_VARIANCE) - else -> return null + is Qualifier -> { + val qualifierType = context[BindingContext.EXPRESSION_TYPE, receiver.expression] ?: return null + TypeInfo(qualifierType, Variance.IN_VARIANCE) } else -> TypeInfo(receiver.getType(), Variance.IN_VARIANCE) } diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunOnClassNoClassObject.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunOnClassNoClassObject.kt new file mode 100644 index 00000000000..4d8666ccd3b --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunOnClassNoClassObject.kt @@ -0,0 +1,10 @@ +// "Create function 'foo' from usage" "false" +// ACTION: Replace with infix function call +// ACTION: Split property declaration +// ERROR: Unresolved reference: foo + +class A(val n: T) + +fun test() { + val a: Int = A.foo(2) +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/property/beforeValOnClassNoClassObject.kt b/idea/testData/quickfix/createFromUsage/createVariable/property/beforeValOnClassNoClassObject.kt new file mode 100644 index 00000000000..6c26b89987f --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/property/beforeValOnClassNoClassObject.kt @@ -0,0 +1,9 @@ +// "Create property 'foo' from usage" "false" +// ACTION: Split property declaration +// ERROR: Unresolved reference: foo + +class A(val n: T) + +fun test() { + val a: Int = A.foo +} diff --git a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java index 608717363b4..60589040d5a 100644 --- a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java @@ -760,6 +760,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("beforeFunOnClassNoClassObject.kt") + public void testFunOnClassNoClassObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunOnClassNoClassObject.kt"); + doTest(fileName); + } + @TestMetadata("beforeFunOnClassObject.kt") public void testFunOnClassObject() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeFunOnClassObject.kt"); @@ -1541,6 +1547,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("beforeValOnClassNoClassObject.kt") + public void testValOnClassNoClassObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/property/beforeValOnClassNoClassObject.kt"); + doTest(fileName); + } + @TestMetadata("beforeValOnClassObject.kt") public void testValOnClassObject() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/property/beforeValOnClassObject.kt");