diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertForEachToForLoopIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertForEachToForLoopIntention.kt index e25e0b0c507..8459a07073d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertForEachToForLoopIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertForEachToForLoopIntention.kt @@ -18,9 +18,9 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.openapi.editor.Editor import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.core.CommentSaver import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.DescriptorUtils -import org.jetbrains.kotlin.resolve.calls.callUtil.getCall import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver @@ -37,8 +37,13 @@ public class ConvertForEachToForLoopIntention : JetSelfTargetingOffsetIndependen override fun applyTo(element: JetSimpleNameExpression, editor: Editor) { val (expressionToReplace, receiver, functionLiteral) = extractData(element)!! + + val commentSaver = CommentSaver(expressionToReplace) + val loop = generateLoop(functionLiteral, receiver) - expressionToReplace.replace(loop) + val result = expressionToReplace.replace(loop) + + commentSaver.restoreComments(result) } private data class Data( diff --git a/idea/testData/intentions/convertForEachToForLoop/keepComments.kt b/idea/testData/intentions/convertForEachToForLoop/keepComments.kt new file mode 100644 index 00000000000..149d578dbe3 --- /dev/null +++ b/idea/testData/intentions/convertForEachToForLoop/keepComments.kt @@ -0,0 +1,5 @@ +// WITH_RUNTIME +fun foo(list: List) { + list.filter { it != null } /* filter out nulls */ + .forEach { print(1..4) /* print x */ } +} \ No newline at end of file diff --git a/idea/testData/intentions/convertForEachToForLoop/keepComments.kt.after b/idea/testData/intentions/convertForEachToForLoop/keepComments.kt.after new file mode 100644 index 00000000000..c1fc20c4d95 --- /dev/null +++ b/idea/testData/intentions/convertForEachToForLoop/keepComments.kt.after @@ -0,0 +1,6 @@ +// WITH_RUNTIME +fun foo(list: List) { + for (it in list.filter { it != null } /* filter out nulls */) { + print(1..4) /* print x */ + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 51b4610bac9..bd48e49e262 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -2875,6 +2875,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("keepComments.kt") + public void testKeepComments() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/convertForEachToForLoop/keepComments.kt"); + doTest(fileName); + } + @TestMetadata("parenthesizedExpression.kt") public void testParenthesizedExpression() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/convertForEachToForLoop/parenthesizedExpression.kt");