From 96c423456a4b1415bc3695d0dadb062cc99dfb57 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 3 Jun 2020 17:52:37 +0700 Subject: [PATCH] IDEA-242445 Inline variable refacting remove comment GitOrigin-RevId: 2f95f3fd529acb19d13dfdfa35143d03502c7747 --- .../impl/quickfix/RemoveUnusedVariableUtil.java | 11 +++++++++-- .../testData/refactoring/inlineLocal/EolComment.java | 9 +++++++++ .../refactoring/inlineLocal/EolComment.java.after | 9 +++++++++ .../java/refactoring/inline/InlineLocalTest.java | 4 ++++ 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/refactoring/inlineLocal/EolComment.java create mode 100644 java/java-tests/testData/refactoring/inlineLocal/EolComment.java.after diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveUnusedVariableUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveUnusedVariableUtil.java index 32239e682b43..4e6be14aa56d 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveUnusedVariableUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveUnusedVariableUtil.java @@ -18,6 +18,7 @@ package com.intellij.codeInsight.daemon.impl.quickfix; import com.intellij.psi.*; import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; +import com.siyeh.ig.psiutils.CommentTracker; import com.siyeh.ig.psiutils.ExpressionUtils; import com.siyeh.ig.psiutils.SideEffectChecker; import org.jetbrains.annotations.Contract; @@ -211,7 +212,7 @@ public class RemoveUnusedVariableUtil { deleteReferences(variable, references, deleteMode); } else if (deleteMode == RemoveMode.DELETE_ALL) { - element.delete(); + deleteVariable(variable); } return true; } @@ -220,7 +221,7 @@ public class RemoveUnusedVariableUtil { if (element instanceof PsiField) { ((PsiField)element).normalizeDeclaration(); } - element.delete(); + deleteVariable(variable); } return !sideEffectsFound; } @@ -230,6 +231,12 @@ public class RemoveUnusedVariableUtil { return true; } + private static void deleteVariable(PsiVariable variable) { + CommentTracker tracker = new CommentTracker(); + tracker.markUnchanged(variable.getInitializer()); // assume that initializer is used (e.g. inlined) + tracker.deleteAndRestoreComments(variable); + } + @NotNull private static PsiElement eraseUnnecessaryOuterParentheses(@NotNull PsiElement element) { PsiElement parenthesizedParent = element; diff --git a/java/java-tests/testData/refactoring/inlineLocal/EolComment.java b/java/java-tests/testData/refactoring/inlineLocal/EolComment.java new file mode 100644 index 000000000000..c038381280b9 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/EolComment.java @@ -0,0 +1,9 @@ +import java.util.*; + +public class UnusedReassignmentInLoop { + + static String test(Deque deque) { + String value = deque.isEmpty() ? null : deque.peek(); // comment + return value; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineLocal/EolComment.java.after b/java/java-tests/testData/refactoring/inlineLocal/EolComment.java.after new file mode 100644 index 000000000000..4ec1297f1a2f --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/EolComment.java.after @@ -0,0 +1,9 @@ +import java.util.*; + +public class UnusedReassignmentInLoop { + + static String test(Deque deque) { + // comment + return deque.isEmpty() ? null : deque.peek(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java index 0e38b34eae25..88a16d2e9f5c 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java @@ -333,6 +333,10 @@ public class InlineLocalTest extends LightJavaCodeInsightTestCase { doTest(false); } + public void testEolComment() { + doTest(false); + } + private void doTest(final boolean inlineDef, String conflictMessage) { try { doTest(inlineDef);