From 87dc1a035b42f7dee6be2922ed482c19debc94f2 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Tue, 26 Feb 2019 19:07:37 +0900 Subject: [PATCH] Convert property initializer to getter: suggest on property name #KT-29344 Fixed --- ...ertPropertyInitializerToGetterIntention.kt | 20 ++++++++++--------- .../onPropertyName.kt | 1 + .../onPropertyName.kt.after | 2 ++ .../quickfix/removeUnused/usedVarAsAlias.kt | 1 + .../intentions/IntentionTestGenerated.java | 5 +++++ 5 files changed, 20 insertions(+), 9 deletions(-) create mode 100644 idea/testData/intentions/convertPropertyInitializerToGetter/onPropertyName.kt create mode 100644 idea/testData/intentions/convertPropertyInitializerToGetter/onPropertyName.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertPropertyInitializerToGetterIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertPropertyInitializerToGetterIntention.kt index f270e38b5d2..1f81ee633fa 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertPropertyInitializerToGetterIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertPropertyInitializerToGetterIntention.kt @@ -26,15 +26,19 @@ import org.jetbrains.kotlin.idea.util.hasJvmFieldAnnotation import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.isExtensionDeclaration +import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.types.isError -class ConvertPropertyInitializerToGetterIntention : SelfTargetingRangeIntention(KtProperty::class.java, "Convert property initializer to getter") { - +class ConvertPropertyInitializerToGetterIntention : SelfTargetingRangeIntention( + KtProperty::class.java, "Convert property initializer to getter" +) { override fun applicabilityRange(element: KtProperty): TextRange? { - val initializer = element.initializer - return if (initializer != null && element.getter == null && !element.isExtensionDeclaration() && !element.isLocal && !element.hasJvmFieldAnnotation()) - initializer.textRange + val initializer = element.initializer ?: return null + val nameIdentifier = element.nameIdentifier ?: return null + return if (element.getter == null && !element.isExtensionDeclaration() && !element.isLocal && !element.hasJvmFieldAnnotation()) + TextRange(nameIdentifier.startOffset, initializer.endOffset) else null } @@ -65,14 +69,12 @@ class ConvertPropertyInitializerToGetterIntention : SelfTargetingRangeIntention< if (setter != null) { property.addBefore(getter, setter) - } - else if (property.isVar) { + } else if (property.isVar) { property.add(getter) val notImplemented = KtPsiFactory(property).createExpression("TODO()") val notImplementedSetter = KtPsiFactory(property).createPropertySetter(notImplemented) property.add(notImplementedSetter) - } - else { + } else { property.add(getter) } diff --git a/idea/testData/intentions/convertPropertyInitializerToGetter/onPropertyName.kt b/idea/testData/intentions/convertPropertyInitializerToGetter/onPropertyName.kt new file mode 100644 index 00000000000..6fc5fd449c0 --- /dev/null +++ b/idea/testData/intentions/convertPropertyInitializerToGetter/onPropertyName.kt @@ -0,0 +1 @@ +val abc = true \ No newline at end of file diff --git a/idea/testData/intentions/convertPropertyInitializerToGetter/onPropertyName.kt.after b/idea/testData/intentions/convertPropertyInitializerToGetter/onPropertyName.kt.after new file mode 100644 index 00000000000..f2d75a7d580 --- /dev/null +++ b/idea/testData/intentions/convertPropertyInitializerToGetter/onPropertyName.kt.after @@ -0,0 +1,2 @@ +val abc: Boolean + get() = true \ No newline at end of file diff --git a/idea/testData/quickfix/removeUnused/usedVarAsAlias.kt b/idea/testData/quickfix/removeUnused/usedVarAsAlias.kt index b8b63f8d7c6..e30006614a7 100644 --- a/idea/testData/quickfix/removeUnused/usedVarAsAlias.kt +++ b/idea/testData/quickfix/removeUnused/usedVarAsAlias.kt @@ -3,6 +3,7 @@ // ACTION: Add getter and setter // ACTION: Add setter // ACTION: Specify type explicitly +// ACTION: Convert property initializer to getter import usedVar as used var usedVar = 0 diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 0442a9e76ce..4d34d83eed0 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -6415,6 +6415,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/convertPropertyInitializerToGetter/notInLambda.kt"); } + @TestMetadata("onPropertyName.kt") + public void testOnPropertyName() throws Exception { + runTest("idea/testData/intentions/convertPropertyInitializerToGetter/onPropertyName.kt"); + } + @TestMetadata("propertyWithInitializerWithSetter.kt") public void testPropertyWithInitializerWithSetter() throws Exception { runTest("idea/testData/intentions/convertPropertyInitializerToGetter/propertyWithInitializerWithSetter.kt");