diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties
index b070d91bdf8..81b1e44571b 100644
--- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties
+++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties
@@ -61,8 +61,6 @@ specify.type.explicitly.add.action.name=Specify type explicitly
specify.type.explicitly.remove.action.name=Remove explicitly specified type
convert.to.expression.body.action.family.name=Convert to Expression Body
convert.to.expression.body.action.name=Convert to expression body
-convert.to.block.body.action.family.name=Convert to Block Body
-convert.to.block.body.action.name=Convert to block body
rename.parameter.to.match.overridden.method=Rename parameter to match overridden method
rename.family=Rename
rename.kotlin.package.class.error="Can't rename kotlin package class"
diff --git a/idea/resources/intentionDescriptions/ConvertToBlockBodyAction/after.kt.template b/idea/resources/intentionDescriptions/ConvertToBlockBodyIntention/after.kt.template
similarity index 100%
rename from idea/resources/intentionDescriptions/ConvertToBlockBodyAction/after.kt.template
rename to idea/resources/intentionDescriptions/ConvertToBlockBodyIntention/after.kt.template
diff --git a/idea/resources/intentionDescriptions/ConvertToBlockBodyAction/before.kt.template b/idea/resources/intentionDescriptions/ConvertToBlockBodyIntention/before.kt.template
similarity index 100%
rename from idea/resources/intentionDescriptions/ConvertToBlockBodyAction/before.kt.template
rename to idea/resources/intentionDescriptions/ConvertToBlockBodyIntention/before.kt.template
diff --git a/idea/resources/intentionDescriptions/ConvertToBlockBodyAction/description.html b/idea/resources/intentionDescriptions/ConvertToBlockBodyIntention/description.html
similarity index 100%
rename from idea/resources/intentionDescriptions/ConvertToBlockBodyAction/description.html
rename to idea/resources/intentionDescriptions/ConvertToBlockBodyIntention/description.html
diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml
index ba491059a6e..4060e8a3049 100644
--- a/idea/src/META-INF/plugin.xml
+++ b/idea/src/META-INF/plugin.xml
@@ -495,7 +495,7 @@
- org.jetbrains.kotlin.idea.intentions.ConvertToBlockBodyAction
+ org.jetbrains.kotlin.idea.intentions.ConvertToBlockBodyIntention
Kotlin
diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToBlockBodyAction.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToBlockBodyIntention.kt
similarity index 61%
rename from idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToBlockBodyAction.kt
rename to idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToBlockBodyIntention.kt
index 5cf380c3e04..190a1722bbe 100644
--- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToBlockBodyAction.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToBlockBodyIntention.kt
@@ -25,20 +25,29 @@ import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
-public class ConvertToBlockBodyAction : PsiElementBaseIntentionAction() {
- override fun getFamilyName(): String = JetBundle.message("convert.to.block.body.action.family.name")
+public class ConvertToBlockBodyIntention : JetSelfTargetingIntention(javaClass(), "Convert to block body") {
+ override fun isApplicableTo(element: JetDeclarationWithBody, caretOffset: Int): Boolean {
+ if (element is JetFunctionLiteral || element.hasBlockBody() || !element.hasBody()) return false
- override fun isAvailable(project: Project, editor: Editor, element: PsiElement): Boolean {
- setText(JetBundle.message("convert.to.block.body.action.name"))
- return findDeclaration(element) != null
+ when (element) {
+ is JetNamedFunction -> {
+ val returnType = functionReturnType(element) ?: return false
+ if (!element.hasDeclaredReturnType() && returnType.isError()) return false// do not convert when type is implicit and unknown
+ return true
+ }
+
+ is JetPropertyAccessor -> return true
+
+ else -> error("Unknown declaration type: $element")
+ }
}
- override fun invoke(project: Project, editor: Editor, element: PsiElement) {
- convert(findDeclaration(element)!!)
+ override fun applyTo(element: JetDeclarationWithBody, editor: Editor) {
+ convert(element)
}
companion object {
- fun convert(declaration: JetDeclarationWithBody): JetDeclarationWithBody {
+ public fun convert(declaration: JetDeclarationWithBody): JetDeclarationWithBody {
val body = declaration.getBodyExpression()!!
fun generateBody(returnsValue: Boolean): JetExpression {
@@ -69,25 +78,5 @@ public class ConvertToBlockBodyAction : PsiElementBaseIntentionAction() {
body.replace(newBody)
return declaration
}
-
- private fun findDeclaration(element: PsiElement): JetDeclarationWithBody? {
- val declaration = element.getStrictParentOfType()
- if (declaration == null || declaration is JetFunctionLiteral || declaration.hasBlockBody()) return null
- val body = declaration.getBodyExpression()
- if (body == null) return null
-
- return when (declaration) {
- is JetNamedFunction -> {
- val returnType = functionReturnType(declaration)
- if (returnType == null) return null
- if (!declaration.hasDeclaredReturnType() && returnType.isError()) return null // do not convert when type is implicit and unknown
- declaration
- }
-
- is JetPropertyAccessor -> declaration
-
- else -> throw RuntimeException("Unknown declaration type: $declaration")
- }
- }
}
}
diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateLocalVariableActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateLocalVariableActionFactory.kt
index 5b82d749ecd..42a30280928 100644
--- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateLocalVariableActionFactory.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateLocalVariableActionFactory.kt
@@ -22,7 +22,7 @@ import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.idea.JetBundle
-import org.jetbrains.kotlin.idea.intentions.ConvertToBlockBodyAction
+import org.jetbrains.kotlin.idea.intentions.ConvertToBlockBodyIntention
import org.jetbrains.kotlin.idea.quickfix.JetSingleIntentionActionFactory
import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.CreateFromUsageFixBase
@@ -57,7 +57,7 @@ object CreateLocalVariableActionFactory: JetSingleIntentionActionFactory() {
val actualContainer = when (container) {
is JetBlockExpression -> container
- else -> ConvertToBlockBodyAction.convert(container as JetDeclarationWithBody).getBodyExpression()!!
+ else -> ConvertToBlockBodyIntention.convert(container as JetDeclarationWithBody).getBodyExpression()!!
} as JetBlockExpression
if (actualContainer != container) {
diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java
index 3c33b09a669..f4ca2f71be1 100644
--- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java
+++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java
@@ -39,7 +39,7 @@ import org.jetbrains.kotlin.analyzer.AnalyzerPackage;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.idea.caches.resolve.ResolvePackage;
import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils;
-import org.jetbrains.kotlin.idea.intentions.ConvertToBlockBodyAction;
+import org.jetbrains.kotlin.idea.intentions.ConvertToBlockBodyIntention;
import org.jetbrains.kotlin.idea.intentions.RemoveCurlyBracesFromTemplateIntention;
import org.jetbrains.kotlin.idea.core.refactoring.JetNameSuggester;
import org.jetbrains.kotlin.idea.refactoring.JetNameValidatorImpl;
@@ -263,7 +263,7 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase {
final JetExpression originalBody = originalDeclaration.getBodyExpression();
assert originalBody != null : "Original body is not found: " + originalDeclaration;
- JetDeclarationWithBody newDeclaration = ConvertToBlockBodyAction.Companion.convert(originalDeclaration);
+ JetDeclarationWithBody newDeclaration = ConvertToBlockBodyIntention.Companion.convert(originalDeclaration);
JetBlockExpression newCommonContainer = (JetBlockExpression) newDeclaration.getBodyExpression();
assert newCommonContainer != null : "New body is not found: " + newDeclaration;
diff --git a/idea/testData/intentions/convertToBlockBody/.intention b/idea/testData/intentions/convertToBlockBody/.intention
index f6aad814c7c..5d0ddcc7d14 100644
--- a/idea/testData/intentions/convertToBlockBody/.intention
+++ b/idea/testData/intentions/convertToBlockBody/.intention
@@ -1 +1 @@
-org.jetbrains.kotlin.idea.intentions.ConvertToBlockBodyAction
+org.jetbrains.kotlin.idea.intentions.ConvertToBlockBodyIntention