ConvertToBlockBodyAction - refactoring

This commit is contained in:
Valentin Kipyatkov
2015-04-14 21:50:28 +03:00
parent b201e60081
commit b980d98af6
9 changed files with 23 additions and 36 deletions
@@ -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"
+1 -1
View File
@@ -495,7 +495,7 @@
</intentionAction>
<intentionAction>
<className>org.jetbrains.kotlin.idea.intentions.ConvertToBlockBodyAction</className>
<className>org.jetbrains.kotlin.idea.intentions.ConvertToBlockBodyIntention</className>
<category>Kotlin</category>
</intentionAction>
@@ -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<JetDeclarationWithBody>(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<JetDeclarationWithBody>()
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")
}
}
}
}
@@ -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) {
@@ -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;
@@ -1 +1 @@
org.jetbrains.kotlin.idea.intentions.ConvertToBlockBodyAction
org.jetbrains.kotlin.idea.intentions.ConvertToBlockBodyIntention