[formatter] fix infinite recursion

Already exists in the new repo: original-hash e7ea6926a8a414ab6082299d99239ad167ab75a2

#KT-40636 Fixed
This commit is contained in:
Dmitry Gridin
2020-07-27 19:56:19 +07:00
parent b1173317c5
commit e8fd69fde1
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.idea.formatter package org.jetbrains.kotlin.idea.formatter
import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.util.Key
import com.intellij.openapi.util.TextRange import com.intellij.openapi.util.TextRange
import com.intellij.psi.PsiComment import com.intellij.psi.PsiComment
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
@@ -51,7 +50,6 @@ private class TrailingCommaPostFormatVisitor(val settings: CodeStyleSettings) :
private fun processCommaOwner(trailingCommaContext: TrailingCommaContext) { private fun processCommaOwner(trailingCommaContext: TrailingCommaContext) {
val ktElement = trailingCommaContext.ktElement val ktElement = trailingCommaContext.ktElement
if (!postFormatIsEnable(ktElement)) return
val lastElementOrComma = trailingCommaOrLastElement(ktElement) ?: return val lastElementOrComma = trailingCommaOrLastElement(ktElement) ?: return
updatePsi(ktElement) { updatePsi(ktElement) {
@@ -78,13 +76,11 @@ private class TrailingCommaPostFormatVisitor(val settings: CodeStyleSettings) :
} }
private fun updatePsi(element: KtElement, block: () -> Unit) { private fun updatePsi(element: KtElement, block: () -> Unit) {
element.putUserData(IS_INSIDE, true)
val oldLength = element.parent.textLength val oldLength = element.parent.textLength
block() block()
val resultElement = CodeStyleManager.getInstance(element.project).reformat(element) val resultElement = CodeStyleManager.getInstance(element.project).reformat(element, true)
myPostProcessor.updateResultRange(oldLength, resultElement.parent.textLength) myPostProcessor.updateResultRange(oldLength, resultElement.parent.textLength)
element.putUserData(IS_INSIDE, false)
} }
private fun correctCommaPosition(parent: KtElement) { private fun correctCommaPosition(parent: KtElement) {
@@ -112,8 +108,6 @@ private class TrailingCommaPostFormatVisitor(val settings: CodeStyleSettings) :
companion object { companion object {
private val LOG = Logger.getInstance(TrailingCommaVisitor::class.java) private val LOG = Logger.getInstance(TrailingCommaVisitor::class.java)
private val IS_INSIDE = Key.create<Boolean>("TrailingCommaPostFormat")
private fun postFormatIsEnable(source: PsiElement): Boolean = source.getUserData(IS_INSIDE) != true
} }
} }