diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertPropertyToFunctionIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertPropertyToFunctionIntention.kt index a5dc3719634..645b2d7885d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertPropertyToFunctionIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertPropertyToFunctionIntention.kt @@ -39,11 +39,9 @@ import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.util.hasJvmFieldAnnotation import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.load.java.JvmAbi -import org.jetbrains.kotlin.psi.KtCallableReferenceExpression -import org.jetbrains.kotlin.psi.KtProperty -import org.jetbrains.kotlin.psi.KtPsiFactory -import org.jetbrains.kotlin.psi.KtSimpleNameExpression +import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType +import org.jetbrains.kotlin.psi.psiUtil.hasActualModifier import org.jetbrains.kotlin.psi.psiUtil.siblings import org.jetbrains.kotlin.resolve.calls.callUtil.getCall import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -108,6 +106,14 @@ class ConvertPropertyToFunctionIntention : SelfTargetingIntention(Kt conflicts.putValue(callable, "Can't modify $renderedCallable") } + if (callable is KtParameter) { + conflicts.putValue( + callable, + if (callable.hasActualModifier()) "Property has an actual declaration in the class constructor" + else "Property overloaded in child class constructor" + ) + } + if (callable is KtProperty) { callableDescriptor.getContainingScope() ?.findFunction(callableDescriptor.name, NoLookupLocation.FROM_IDE) { it.valueParameters.isEmpty() } diff --git a/idea/testData/intentions/convertPropertyToFunction/overrides2.kt b/idea/testData/intentions/convertPropertyToFunction/overrides2.kt new file mode 100644 index 00000000000..ecd573f8cde --- /dev/null +++ b/idea/testData/intentions/convertPropertyToFunction/overrides2.kt @@ -0,0 +1,8 @@ +// SHOULD_FAIL_WITH: Property overloaded in child class constructor +package test + +open class Parent() { + open val o: String = "" +} + +class Child(override val o: String) : Parent() \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/convertPropertyToFunction/header/header.kt b/idea/testData/multiModuleQuickFix/convertPropertyToFunction/header/header.kt new file mode 100644 index 00000000000..b23547b260f --- /dev/null +++ b/idea/testData/multiModuleQuickFix/convertPropertyToFunction/header/header.kt @@ -0,0 +1,6 @@ +// "Convert property to function" "true" +// SHOULD_FAIL_WITH: Property has an actual declaration in the class constructor + +expect class Main { + val name: String +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/convertPropertyToFunction/jvm/jvm.kt b/idea/testData/multiModuleQuickFix/convertPropertyToFunction/jvm/jvm.kt new file mode 100644 index 00000000000..17f967ba554 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/convertPropertyToFunction/jvm/jvm.kt @@ -0,0 +1,3 @@ +actual class Main( + actual val name: String +) \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 755786e2026..b564e84fa8a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -6528,6 +6528,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/convertPropertyToFunction/overrides.kt"); } + @TestMetadata("overrides2.kt") + public void testOverrides2() throws Exception { + runTest("idea/testData/intentions/convertPropertyToFunction/overrides2.kt"); + } + @TestMetadata("propertyCallGroovy.kt") public void testPropertyCallGroovy() throws Exception { runTest("idea/testData/intentions/convertPropertyToFunction/propertyCallGroovy.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java index f3e44f4e572..e497933b00d 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java @@ -199,6 +199,11 @@ public class QuickFixMultiModuleTestGenerated extends AbstractQuickFixMultiModul runTest("idea/testData/multiModuleQuickFix/convertPropertyGetterToInitializer/"); } + @TestMetadata("convertPropertyToFunction") + public void testConvertPropertyToFunction() throws Exception { + runTest("idea/testData/multiModuleQuickFix/convertPropertyToFunction/"); + } + @TestMetadata("createClassFromUsageImport") public void testCreateClassFromUsageImport() throws Exception { runTest("idea/testData/multiModuleQuickFix/createClassFromUsageImport/");