diff --git a/idea/src/org/jetbrains/kotlin/idea/joinLines/JoinWithTrailingCommaHandler.kt b/idea/src/org/jetbrains/kotlin/idea/joinLines/JoinWithTrailingCommaHandler.kt index 36af4d6fcef..b40fabe9d9c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/joinLines/JoinWithTrailingCommaHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/joinLines/JoinWithTrailingCommaHandler.kt @@ -13,8 +13,7 @@ import com.intellij.psi.codeStyle.CodeStyleManager import org.jetbrains.kotlin.idea.core.util.containsLineBreakInRange import org.jetbrains.kotlin.idea.formatter.trailingComma.TrailingCommaHelper import org.jetbrains.kotlin.idea.formatter.trailingComma.TrailingCommaState -import org.jetbrains.kotlin.idea.formatter.trailingComma.canAddTrailingCommaWithRegistryCheck -import org.jetbrains.kotlin.idea.formatter.trailingComma.existsOrMissing +import org.jetbrains.kotlin.idea.formatter.trailingComma.canAddTrailingComma import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf @@ -26,12 +25,22 @@ class JoinWithTrailingCommaHandler : JoinLinesHandlerDelegate { val commaOwner = file.findElementAt(start) ?.parentsWithSelf ?.filter { !document.containsLineBreakInRange(it.textRange) } - ?.findLast { it.canAddTrailingCommaWithRegistryCheck() } as? KtElement + ?.findLast { it.canAddTrailingComma() } as? KtElement ?: return CANNOT_JOIN - if (TrailingCommaState.stateForElement(commaOwner).existsOrMissing) return CANNOT_JOIN - val result = CodeStyleManager.getInstance(file.project).reformat(commaOwner) as KtElement - return TrailingCommaHelper.elementAfterLastElement(result)?.startOffset ?: end - 1 + return when (TrailingCommaState.stateForElement(commaOwner)) { + TrailingCommaState.REDUNDANT, TrailingCommaState.NOT_EXISTS -> { + val oldLen = commaOwner.textLength + val result = CodeStyleManager.getInstance(file.project).reformat(commaOwner) as KtElement + if (oldLen != result.textLength) + TrailingCommaHelper.elementAfterLastElement(result)?.startOffset ?: end - 1 + else + CANNOT_JOIN + } + + else -> + CANNOT_JOIN + } } } diff --git a/idea/testData/joinLines/removeTrailingComma/functionArguments.kt.after b/idea/testData/joinLines/removeTrailingComma/functionArguments.kt.after index 9473dccf097..87c43518295 100644 --- a/idea/testData/joinLines/removeTrailingComma/functionArguments.kt.after +++ b/idea/testData/joinLines/removeTrailingComma/functionArguments.kt.after @@ -1,3 +1,3 @@ fun a() { - b(1, 3, 2424, awdawd,) + b(1, 3, 2424, awdawd) } \ No newline at end of file diff --git a/idea/testData/joinLines/removeTrailingComma/indices.kt b/idea/testData/joinLines/removeTrailingComma/indices.kt index bf1853276ec..ab61b6d5806 100644 --- a/idea/testData/joinLines/removeTrailingComma/indices.kt +++ b/idea/testData/joinLines/removeTrailingComma/indices.kt @@ -1,4 +1,4 @@ fun a() { - g[1, 2, 3,/**/ + g[1, 2, 3,/**/ ] } \ No newline at end of file diff --git a/idea/testData/joinLines/removeTrailingComma/indices.kt.after b/idea/testData/joinLines/removeTrailingComma/indices.kt.after index bae67c95743..ac8529c10a4 100644 --- a/idea/testData/joinLines/removeTrailingComma/indices.kt.after +++ b/idea/testData/joinLines/removeTrailingComma/indices.kt.after @@ -1,3 +1,3 @@ fun a() { - g[1, 2, 3,/**/] + g[1, 2, 3/**/] } \ No newline at end of file diff --git a/idea/testData/joinLines/removeTrailingComma/literal.kt.after b/idea/testData/joinLines/removeTrailingComma/literal.kt.after index d6967a8c1e2..b0a998b0e13 100644 --- a/idea/testData/joinLines/removeTrailingComma/literal.kt.after +++ b/idea/testData/joinLines/removeTrailingComma/literal.kt.after @@ -1,2 +1,2 @@ -@Anno([1, 2, 3, ]) +@Anno([1, 2, 3]) class A diff --git a/idea/testData/joinLines/removeTrailingComma/typeArguments.kt.after b/idea/testData/joinLines/removeTrailingComma/typeArguments.kt.after index 7fbbf9dd3bf..b07738f918a 100644 --- a/idea/testData/joinLines/removeTrailingComma/typeArguments.kt.after +++ b/idea/testData/joinLines/removeTrailingComma/typeArguments.kt.after @@ -1,3 +1,3 @@ fun a() { - b >() + b>() } \ No newline at end of file