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
|
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.family.name=Convert to Expression Body
|
||||||
convert.to.expression.body.action.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.parameter.to.match.overridden.method=Rename parameter to match overridden method
|
||||||
rename.family=Rename
|
rename.family=Rename
|
||||||
rename.kotlin.package.class.error="Can't rename kotlin package class"
|
rename.kotlin.package.class.error="Can't rename kotlin package class"
|
||||||
|
|||||||
@@ -495,7 +495,7 @@
|
|||||||
</intentionAction>
|
</intentionAction>
|
||||||
|
|
||||||
<intentionAction>
|
<intentionAction>
|
||||||
<className>org.jetbrains.kotlin.idea.intentions.ConvertToBlockBodyAction</className>
|
<className>org.jetbrains.kotlin.idea.intentions.ConvertToBlockBodyIntention</className>
|
||||||
<category>Kotlin</category>
|
<category>Kotlin</category>
|
||||||
</intentionAction>
|
</intentionAction>
|
||||||
|
|
||||||
|
|||||||
+17
-28
@@ -25,20 +25,29 @@ import org.jetbrains.kotlin.psi.*
|
|||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||||
|
|
||||||
public class ConvertToBlockBodyAction : PsiElementBaseIntentionAction() {
|
public class ConvertToBlockBodyIntention : JetSelfTargetingIntention<JetDeclarationWithBody>(javaClass(), "Convert to block body") {
|
||||||
override fun getFamilyName(): String = JetBundle.message("convert.to.block.body.action.family.name")
|
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 {
|
when (element) {
|
||||||
setText(JetBundle.message("convert.to.block.body.action.name"))
|
is JetNamedFunction -> {
|
||||||
return findDeclaration(element) != null
|
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) {
|
override fun applyTo(element: JetDeclarationWithBody, editor: Editor) {
|
||||||
convert(findDeclaration(element)!!)
|
convert(element)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun convert(declaration: JetDeclarationWithBody): JetDeclarationWithBody {
|
public fun convert(declaration: JetDeclarationWithBody): JetDeclarationWithBody {
|
||||||
val body = declaration.getBodyExpression()!!
|
val body = declaration.getBodyExpression()!!
|
||||||
|
|
||||||
fun generateBody(returnsValue: Boolean): JetExpression {
|
fun generateBody(returnsValue: Boolean): JetExpression {
|
||||||
@@ -69,25 +78,5 @@ public class ConvertToBlockBodyAction : PsiElementBaseIntentionAction() {
|
|||||||
body.replace(newBody)
|
body.replace(newBody)
|
||||||
return declaration
|
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 com.intellij.openapi.project.Project
|
||||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||||
import org.jetbrains.kotlin.idea.JetBundle
|
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.quickfix.JetSingleIntentionActionFactory
|
||||||
import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil
|
import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil
|
||||||
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.CreateFromUsageFixBase
|
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.CreateFromUsageFixBase
|
||||||
@@ -57,7 +57,7 @@ object CreateLocalVariableActionFactory: JetSingleIntentionActionFactory() {
|
|||||||
|
|
||||||
val actualContainer = when (container) {
|
val actualContainer = when (container) {
|
||||||
is JetBlockExpression -> container
|
is JetBlockExpression -> container
|
||||||
else -> ConvertToBlockBodyAction.convert(container as JetDeclarationWithBody).getBodyExpression()!!
|
else -> ConvertToBlockBodyIntention.convert(container as JetDeclarationWithBody).getBodyExpression()!!
|
||||||
} as JetBlockExpression
|
} as JetBlockExpression
|
||||||
|
|
||||||
if (actualContainer != container) {
|
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.builtins.KotlinBuiltIns;
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.ResolvePackage;
|
import org.jetbrains.kotlin.idea.caches.resolve.ResolvePackage;
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils;
|
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.intentions.RemoveCurlyBracesFromTemplateIntention;
|
||||||
import org.jetbrains.kotlin.idea.core.refactoring.JetNameSuggester;
|
import org.jetbrains.kotlin.idea.core.refactoring.JetNameSuggester;
|
||||||
import org.jetbrains.kotlin.idea.refactoring.JetNameValidatorImpl;
|
import org.jetbrains.kotlin.idea.refactoring.JetNameValidatorImpl;
|
||||||
@@ -263,7 +263,7 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase {
|
|||||||
final JetExpression originalBody = originalDeclaration.getBodyExpression();
|
final JetExpression originalBody = originalDeclaration.getBodyExpression();
|
||||||
assert originalBody != null : "Original body is not found: " + originalDeclaration;
|
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();
|
JetBlockExpression newCommonContainer = (JetBlockExpression) newDeclaration.getBodyExpression();
|
||||||
assert newCommonContainer != null : "New body is not found: " + newDeclaration;
|
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