diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt index 1937c330266..96805500268 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt @@ -20,6 +20,7 @@ import com.intellij.codeInsight.intention.LowPriorityAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.openapi.util.Key +import com.intellij.openapi.util.TextRange import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.PsiElement import com.intellij.psi.PsiMethod @@ -45,10 +46,7 @@ import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.KtPsiFactory.CallableBuilder.Target.READ_ONLY_PROPERTY -import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch -import org.jetbrains.kotlin.psi.psiUtil.getStartOffsetIn -import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType +import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.utils.findVariable @@ -198,8 +196,9 @@ class ConvertFunctionToPropertyIntention : override fun startInWriteAction(): Boolean = false override fun isApplicableTo(element: KtNamedFunction, caretOffset: Int): Boolean { + val funKeyword = element.funKeyword ?: return false val identifier = element.nameIdentifier ?: return false - if (!identifier.textRange.containsOffset(caretOffset)) return false + if (!TextRange(funKeyword.startOffset, identifier.endOffset).containsOffset(caretOffset)) return false if (element.valueParameters.isNotEmpty() || element.isLocal) return false diff --git a/idea/testData/intentions/convertFunctionToProperty/onFunKeyword.kt b/idea/testData/intentions/convertFunctionToProperty/onFunKeyword.kt new file mode 100644 index 00000000000..1d14c99849a --- /dev/null +++ b/idea/testData/intentions/convertFunctionToProperty/onFunKeyword.kt @@ -0,0 +1 @@ +fun foo(): Int = 1 \ No newline at end of file diff --git a/idea/testData/intentions/convertFunctionToProperty/onFunKeyword.kt.after b/idea/testData/intentions/convertFunctionToProperty/onFunKeyword.kt.after new file mode 100644 index 00000000000..c4825f64a43 --- /dev/null +++ b/idea/testData/intentions/convertFunctionToProperty/onFunKeyword.kt.after @@ -0,0 +1,2 @@ +val foo: Int + get() = 1 \ 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 9dc7f5a9352..db245be4303 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -4500,6 +4500,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/convertFunctionToProperty/nothingFun.kt"); } + @TestMetadata("onFunKeyword.kt") + public void testOnFunKeyword() throws Exception { + runTest("idea/testData/intentions/convertFunctionToProperty/onFunKeyword.kt"); + } + @TestMetadata("otherRefs.kt") public void testOtherRefs() throws Exception { runTest("idea/testData/intentions/convertFunctionToProperty/otherRefs.kt");