ConvertToBlockBodyAction - refactoring
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
+17
-28
@@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -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) {
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user