Fix formatting in "simplify call chain" #KT-28576 Fixed

This commit is contained in:
Mikhail Glukhikh
2018-11-30 22:20:12 +03:00
parent a3909d8e47
commit de33905c44
4 changed files with 38 additions and 24 deletions
@@ -0,0 +1,26 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.idea.formatter
import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.util.TextRange
import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiFile
import com.intellij.psi.codeStyle.CodeStyleManager
fun PsiFile.commitAndUnblockDocument(): Boolean {
val virtualFile = this.virtualFile ?: return false
val document = FileDocumentManager.getInstance().getDocument(virtualFile) ?: return false
val documentManager = PsiDocumentManager.getInstance(project)
documentManager.doPostponedOperationsAndUnblockDocument(document)
documentManager.commitDocument(document)
return true
}
fun PsiFile.adjustLineIndent(startOffset: Int, endOffset: Int) {
if (!commitAndUnblockDocument()) return
CodeStyleManager.getInstance(project).adjustLineIndent(this, TextRange(startOffset, endOffset))
}
@@ -9,16 +9,12 @@ import com.intellij.codeInspection.LocalQuickFix
import com.intellij.codeInspection.ProblemDescriptor
import com.intellij.codeInspection.ProblemHighlightType
import com.intellij.codeInspection.ProblemsHolder
import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.TextRange
import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiElementVisitor
import com.intellij.psi.PsiFile
import com.intellij.psi.codeStyle.CodeStyleManager
import org.jetbrains.kotlin.KtNodeTypes
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.formatter.adjustLineIndent
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.isElseIf
import org.jetbrains.kotlin.idea.refactoring.getLineNumber
import org.jetbrains.kotlin.psi.*
@@ -79,16 +75,6 @@ private class RemoveRedundantElseFix : LocalQuickFix {
(added.getNextSiblingIgnoringWhitespace() ?: added.parent).endOffset
)
}
fun PsiFile.adjustLineIndent(startOffset: Int, endOffset: Int) {
val virtualFile = this.virtualFile ?: return
val document = FileDocumentManager.getInstance().getDocument(virtualFile) ?: return
val documentManager = PsiDocumentManager.getInstance(project)
val psiFile = documentManager.getPsiFile(document) ?: return
documentManager.commitDocument(document)
documentManager.doPostponedOperationsAndUnblockDocument(document)
CodeStyleManager.getInstance(project).adjustLineIndent(psiFile, TextRange(startOffset, endOffset))
}
}
private fun KtIfExpression.lastSingleElseKeyword(): PsiElement? {
@@ -24,6 +24,7 @@ import com.intellij.psi.codeStyle.CodeStyleManager
import org.jetbrains.kotlin.idea.core.ShortenReferences
import org.jetbrains.kotlin.idea.core.moveFunctionLiteralOutsideParentheses
import org.jetbrains.kotlin.idea.core.replaced
import org.jetbrains.kotlin.idea.formatter.commitAndUnblockDocument
import org.jetbrains.kotlin.idea.intentions.callExpression
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.PsiChildRange
@@ -81,18 +82,19 @@ class SimplifyCallChainFix(
"$receiverExpressionOrEmptyString$operationSign$newCallText($argumentsText)"
)
val project = qualifiedExpression.project
val file = qualifiedExpression.containingKtFile
val result = qualifiedExpression.replaced(newQualifiedOrCallExpression)
if (lambdaExpression != null) {
val callExpression = when (newQualifiedOrCallExpression) {
is KtQualifiedExpression -> newQualifiedOrCallExpression.callExpression
is KtCallExpression -> newQualifiedOrCallExpression
val callExpression = when (result) {
is KtQualifiedExpression -> result.callExpression
is KtCallExpression -> result
else -> null
}
callExpression?.moveFunctionLiteralOutsideParentheses()
}
val project = qualifiedExpression.project
val file = qualifiedExpression.containingKtFile
val result = qualifiedExpression.replaced(newQualifiedOrCallExpression)
result.containingKtFile.commitAndUnblockDocument()
val reformatted = CodeStyleManager.getInstance(project).reformat(result)
ShortenReferences.DEFAULT.process(reformatted as KtElement)
if (runOptimizeImports) {
@@ -1,7 +1,7 @@
// WITH_RUNTIME
val x = listOf(1, 2, 3).joinToString(prefix = "= ", separator = " + ") {
val sb = StringBuilder()
sb.append(it).append(" + ").append(it)
sb
val sb = StringBuilder()
sb.append(it).append(" + ").append(it)
sb
}