From 6d20d8614a077a898b0a521c5503a0c5fa588d3c Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Mon, 27 Nov 2017 17:29:32 +0100 Subject: [PATCH] preserve comments: surround with auto-closeable --- .../impl/SurroundAutoCloseableAction.java | 14 +++++++------- .../surroundAutoCloseable/Expression.java | 2 +- .../surroundAutoCloseable/Expression_after.java | 1 + .../surroundAutoCloseable/MixedUsages.java | 2 +- .../surroundAutoCloseable/MixedUsages_after.java | 1 + 5 files changed, 11 insertions(+), 9 deletions(-) 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 18a6dffc7e63..eb08d1817064 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 @@ -42,6 +42,7 @@ import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.ObjectUtils; import com.intellij.util.SmartList; +import com.siyeh.ig.psiutils.CommentTracker; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -144,9 +145,9 @@ public class SurroundAutoCloseableAction extends PsiElementBaseIntentionAction { } } - String text = "try (" + variable.getTypeElement().getText() + " " + variable.getName() + " = " + initializer.getText() + ") {}"; - PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); - PsiTryStatement armStatement = (PsiTryStatement)declaration.replace(factory.createStatementFromText(text, codeBlock)); + CommentTracker tracker = new CommentTracker(); + String text = "try (" + variable.getTypeElement().getText() + " " + variable.getName() + " = " + tracker.markUnchanged(initializer).getText() + ") {}"; + PsiTryStatement armStatement = (PsiTryStatement)tracker.replaceAndRestoreComments(declaration, text); List toFormat = null; if (last != null) { @@ -228,11 +229,10 @@ public class SurroundAutoCloseableAction extends PsiElementBaseIntentionAction { private static void processExpression(Project project, Editor editor, PsiExpression expression) { PsiType type = ObjectUtils.assertNotNull(expression.getType()); PsiElement statement = expression.getParent(); - PsiElement codeBlock = statement.getParent(); - String text = "try (" + type.getCanonicalText(true) + " r = " + expression.getText() + ") {}"; - PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); - PsiTryStatement tryStatement = (PsiTryStatement)statement.replace(factory.createStatementFromText(text, codeBlock)); + CommentTracker commentTracker = new CommentTracker(); + String text = "try (" + type.getCanonicalText(true) + " r = " + commentTracker.markUnchanged(expression).getText() + ") {}"; + PsiTryStatement tryStatement = (PsiTryStatement)commentTracker.replaceAndRestoreComments(statement, text); tryStatement = (PsiTryStatement)CodeStyleManager.getInstance(project).reformat(tryStatement); diff --git a/java/java-tests/testData/codeInsight/surroundAutoCloseable/Expression.java b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Expression.java index 977f25de92d1..4306a96f707c 100644 --- a/java/java-tests/testData/codeInsight/surroundAutoCloseable/Expression.java +++ b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Expression.java @@ -2,6 +2,6 @@ import java.io.*; class C { void m(File file) throws IOException { - new FileInputStream(file); + new FileInputStream(file);//comment after expr } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/surroundAutoCloseable/Expression_after.java b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Expression_after.java index cca3b0a3b6a1..9018916010f5 100644 --- a/java/java-tests/testData/codeInsight/surroundAutoCloseable/Expression_after.java +++ b/java/java-tests/testData/codeInsight/surroundAutoCloseable/Expression_after.java @@ -2,6 +2,7 @@ import java.io.*; class C { void m(File file) throws IOException { + //comment after expr try (FileInputStream fileInputStream = new FileInputStream(file)) { } } diff --git a/java/java-tests/testData/codeInsight/surroundAutoCloseable/MixedUsages.java b/java/java-tests/testData/codeInsight/surroundAutoCloseable/MixedUsages.java index ac9838afca82..ef18bbd69f3e 100644 --- a/java/java-tests/testData/codeInsight/surroundAutoCloseable/MixedUsages.java +++ b/java/java-tests/testData/codeInsight/surroundAutoCloseable/MixedUsages.java @@ -5,7 +5,7 @@ import java.util.Arrays; class C { void m(File file) throws IOException { - FileInputStream fileInputStream = new FileInputStream(file); + FileInputStream fileInputStream = new FileInputStream(file);//comment int read, len = -1; boolean empty = true; do { diff --git a/java/java-tests/testData/codeInsight/surroundAutoCloseable/MixedUsages_after.java b/java/java-tests/testData/codeInsight/surroundAutoCloseable/MixedUsages_after.java index fa1914151b77..ee7a030c778a 100644 --- a/java/java-tests/testData/codeInsight/surroundAutoCloseable/MixedUsages_after.java +++ b/java/java-tests/testData/codeInsight/surroundAutoCloseable/MixedUsages_after.java @@ -5,6 +5,7 @@ import java.util.Arrays; class C { void m(File file) throws IOException { + //comment int len; boolean empty; try (FileInputStream fileInputStream = new FileInputStream(file)) {