From d5d1158e44014004e75e27c74f5131b203262ddb Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 26 May 2015 14:44:11 +0300 Subject: [PATCH] Comment saver is more clever about comma's --- .../jetbrains/kotlin/idea/core/CommentSaver.kt | 16 ++++++++++++---- .../keepComments/addArguments.kt | 13 +++++++++++++ .../keepComments/addArguments.kt.after | 13 +++++++++++++ .../idea/quickfix/QuickFixTestGenerated.java | 6 ++++++ 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 idea/testData/quickfix/deprecatedSymbolUsage/keepComments/addArguments.kt create mode 100644 idea/testData/quickfix/deprecatedSymbolUsage/keepComments/addArguments.kt.after diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/CommentSaver.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/CommentSaver.kt index 1dfd3e6c2db..4974d6cd92b 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/CommentSaver.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/CommentSaver.kt @@ -230,7 +230,7 @@ public class CommentSaver(originalElements: PsiChildRange) { val anchor = chooseAnchor(anchorBefore, anchorAfter) if (anchor != null) { - val anchorElement = findFinalAnchorElement(anchor) + val anchorElement = findFinalAnchorElement(anchor, comment) val parent = anchorElement.getParent() if (anchor.before) { parent.addAfter(comment, anchorElement) @@ -288,21 +288,29 @@ public class CommentSaver(originalElements: PsiChildRange) { return anchorBefore //TODO: more analysis? } - private fun findFinalAnchorElement(anchor: Anchor): PsiElement { + private fun findFinalAnchorElement(anchor: Anchor, comment: PsiComment): PsiElement { val tokensBetween = anchor.treeElementsBetween.filterIsInstance() - var psiElement = anchor.element - if (tokensBetween.isEmpty()) return psiElement fun PsiElement.next(): PsiElement? { val filter = { element: PsiElement -> element !is PsiWhiteSpace && element.getTextLength() > 0 } return if (anchor.before) nextLeaf(filter) else prevLeaf(filter) } + var psiElement = anchor.element for (token in tokensBetween.reverse()) { val next = psiElement.next() ?: break if (next.getNode().getElementType() != token.tokenType) break psiElement = next } + + // don't put end of line comment right before comma + if (anchor.before && comment.getNode().getElementType() == JetTokens.EOL_COMMENT) { + val next = psiElement.next() + if (next != null && next.getNode().getElementType() == JetTokens.COMMA) { + psiElement = next + } + } + return psiElement } } \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/keepComments/addArguments.kt b/idea/testData/quickfix/deprecatedSymbolUsage/keepComments/addArguments.kt new file mode 100644 index 00000000000..395d09f03ba --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/keepComments/addArguments.kt @@ -0,0 +1,13 @@ +// "Replace with 'newFun(p1, -1, p2, p3, -2)'" "true" + +@deprecated("", ReplaceWith("newFun(p1, -1, p2, p3, -2)")) +fun oldFun(p1: Int, p2: Int, p3: Int){} + +fun newFun(p1: Int, a: Int, p2: Int, p3: Int, b: Int){} + + +fun foo() { + oldFun(0, // 0 + 1, // 1 + 2 // 2 + ) diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/keepComments/addArguments.kt.after b/idea/testData/quickfix/deprecatedSymbolUsage/keepComments/addArguments.kt.after new file mode 100644 index 00000000000..2a594d00ec3 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/keepComments/addArguments.kt.after @@ -0,0 +1,13 @@ +// "Replace with 'newFun(p1, -1, p2, p3, -2)'" "true" + +@deprecated("", ReplaceWith("newFun(p1, -1, p2, p3, -2)")) +fun oldFun(p1: Int, p2: Int, p3: Int){} + +fun newFun(p1: Int, a: Int, p2: Int, p3: Int, b: Int){} + + +fun foo() { + newFun(0, // 0 + -1, 1, // 1 + 2, // 2 + -2) diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index ff981b7e1d7..8604a11dfb7 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -3221,6 +3221,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) public static class KeepComments extends AbstractQuickFixTest { + @TestMetadata("addArguments.kt") + public void testAddArguments() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/deprecatedSymbolUsage/keepComments/addArguments.kt"); + doTest(fileName); + } + public void testAllFilesPresentInKeepComments() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/deprecatedSymbolUsage/keepComments"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true); }