Join lines could "convert to expression body" #KT-15769 Fixed (#1304)

This commit is contained in:
Toshiaki Kameyama
2017-09-21 23:15:44 +09:00
committed by Dmitry Jemerov
parent ab25beeb37
commit 0b7055f7c0
4 changed files with 25 additions and 3 deletions
@@ -19,9 +19,11 @@ package org.jetbrains.kotlin.idea.joinLines
import com.intellij.codeInsight.editorActions.JoinRawLinesHandlerDelegate
import com.intellij.openapi.editor.Document
import com.intellij.psi.PsiFile
import org.jetbrains.kotlin.idea.inspections.UseExpressionBodyInspection
import org.jetbrains.kotlin.idea.intentions.MergeIfsIntention
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.startOffset
class JoinBlockIntoSingleStatementHandler : JoinRawLinesHandlerDelegate {
override fun tryJoinRawLines(document: Document, file: PsiFile, start: Int, end: Int): Int {
@@ -36,8 +38,12 @@ class JoinBlockIntoSingleStatementHandler : JoinRawLinesHandlerDelegate {
val block = brace.parent as? KtBlockExpression ?: return -1
val statement = block.statements.singleOrNull() ?: return -1
val parent = block.parent
if (parent !is KtContainerNode && parent !is KtWhenEntry) return -1
val useExpressionBodyInspection = UseExpressionBodyInspection(convertEmptyToUnit = false)
val oneLineReturnFunction = (parent as? KtDeclarationWithBody)?.takeIf { useExpressionBodyInspection.isActiveFor(it) }
if (parent !is KtContainerNode && parent !is KtWhenEntry && oneLineReturnFunction == null) return -1
if (block.node.getChildren(KtTokens.COMMENTS).isNotEmpty()) return -1 // otherwise we will loose comments
// handle nested if's
@@ -61,8 +67,14 @@ class JoinBlockIntoSingleStatementHandler : JoinRawLinesHandlerDelegate {
}
}
val newStatement = block.replace(statement)
return newStatement.textRange!!.startOffset
return if (oneLineReturnFunction != null) {
useExpressionBodyInspection.simplify(oneLineReturnFunction, false)
oneLineReturnFunction.bodyExpression!!.startOffset
}
else {
val newStatement = block.replace(statement)
newStatement.textRange!!.startOffset
}
}
override fun tryJoinLines(document: Document, file: PsiFile, start: Int, end: Int) = -1
@@ -0,0 +1,3 @@
fun foo(): Int {<caret>
return 1
}
@@ -0,0 +1 @@
fun foo(): Int =<caret> 1
@@ -359,6 +359,12 @@ public class JoinLinesTestGenerated extends AbstractJoinLinesTest {
doTest(fileName);
}
@TestMetadata("FunctionWithOneLineReturn.kt")
public void testFunctionWithOneLineReturn() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/joinLines/removeBraces/FunctionWithOneLineReturn.kt");
doTest(fileName);
}
@TestMetadata("If.kt")
public void testIf() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/joinLines/removeBraces/If.kt");