diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SurroundAutoCloseableAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SurroundAutoCloseableAction.java index eb08d1817064..93417bdb4de8 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SurroundAutoCloseableAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SurroundAutoCloseableAction.java @@ -190,7 +190,8 @@ public class SurroundAutoCloseableAction extends PsiElementBaseIntentionAction { if (!(child instanceof PsiDeclarationStatement)) continue; PsiElement anchor = child; - for (PsiElement declared : ((PsiDeclarationStatement)child).getDeclaredElements()) { + PsiElement[] declaredElements = ((PsiDeclarationStatement)child).getDeclaredElements(); + for (PsiElement declared : declaredElements) { if (!(declared instanceof PsiLocalVariable)) continue; int endOffset = last.getTextRange().getEndOffset(); @@ -204,13 +205,14 @@ public class SurroundAutoCloseableAction extends PsiElementBaseIntentionAction { assert name != null : child.getText(); toFormat.add(parent.addBefore(factory.createVariableDeclarationStatement(name, var.getType(), null), statement)); + CommentTracker commentTracker = new CommentTracker(); PsiExpression varInit = var.getInitializer(); if (varInit != null) { - String varAssignText = name + " = " + varInit.getText() + ";"; + String varAssignText = name + " = " + commentTracker.markUnchanged(varInit).getText() + ";"; anchor = parent.addAfter(factory.createStatementFromText(varAssignText, parent), anchor); } - var.delete(); + commentTracker.deleteAndRestoreComments(declaredElements.length == 1 ? child : var); } } diff --git a/java/java-tests/testData/codeInsight/surroundAutoCloseable/CommentsInVarDeclaration.java b/java/java-tests/testData/codeInsight/surroundAutoCloseable/CommentsInVarDeclaration.java new file mode 100644 index 000000000000..1ba64d1fafc9 --- /dev/null +++ b/java/java-tests/testData/codeInsight/surroundAutoCloseable/CommentsInVarDeclaration.java @@ -0,0 +1,11 @@ +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +class C { + void m(File file) throws IOException { + FileInputStream fileInputStream = new FileInputStream(file); + String s = "initial value";//Non-NLS + String bar = s + fileInputStream.read(); + } +} diff --git a/java/java-tests/testData/codeInsight/surroundAutoCloseable/CommentsInVarDeclaration_after.java b/java/java-tests/testData/codeInsight/surroundAutoCloseable/CommentsInVarDeclaration_after.java new file mode 100644 index 000000000000..1f337be55908 --- /dev/null +++ b/java/java-tests/testData/codeInsight/surroundAutoCloseable/CommentsInVarDeclaration_after.java @@ -0,0 +1,12 @@ +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +class C { + void m(File file) throws IOException { + try (FileInputStream fileInputStream = new FileInputStream(file)) { + String s = "initial value";//Non-NLS + String bar = s + fileInputStream.read(); + } + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/SurroundAutoCloseableActionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/SurroundAutoCloseableActionTest.java index d1bf91c9d5d7..73083076ee20 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/SurroundAutoCloseableActionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/intention/SurroundAutoCloseableActionTest.java @@ -34,6 +34,7 @@ public class SurroundAutoCloseableActionTest extends LightCodeInsightFixtureTest public void testSplitVar() { doTest(); } public void testExpression() { doTest(); } public void testExpressionIncomplete() { doTest(); } + public void testCommentsInVarDeclaration() { doTest(); } private void doTest() { String name = getTestName(false);