diff --git a/idea/src/org/jetbrains/kotlin/idea/formatter/Utils.kt b/idea/src/org/jetbrains/kotlin/idea/formatter/Utils.kt new file mode 100644 index 00000000000..f81deb04a02 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/formatter/Utils.kt @@ -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)) +} diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantElseInIfInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantElseInIfInspection.kt index adc53380876..23200c52daf 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantElseInIfInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantElseInIfInspection.kt @@ -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? { diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/collections/SimplifyCallChainFix.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/collections/SimplifyCallChainFix.kt index 1530f188674..a843d7815a7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/collections/SimplifyCallChainFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/collections/SimplifyCallChainFix.kt @@ -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) { diff --git a/idea/testData/inspectionsLocal/collections/simplifiableCallChain/joinToStringViaBuilder.kt.after b/idea/testData/inspectionsLocal/collections/simplifiableCallChain/joinToStringViaBuilder.kt.after index eab454a296c..3611c4d5858 100644 --- a/idea/testData/inspectionsLocal/collections/simplifiableCallChain/joinToStringViaBuilder.kt.after +++ b/idea/testData/inspectionsLocal/collections/simplifiableCallChain/joinToStringViaBuilder.kt.after @@ -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 } \ No newline at end of file