From 307a7c774cfdc16fab9198384c5971d55b005701 Mon Sep 17 00:00:00 2001 From: Pavel Dolgov Date: Wed, 6 Dec 2017 20:35:23 +0300 Subject: [PATCH] Java: Preserve comment from removed redundant variable (IDEA-182669) --- .../ReturnSeparatedFromComputationInspection.java | 11 ++++++++++- .../afterCommentInVariableDeclaration.java | 8 ++++++++ .../afterCommentInVariableDeclaration2.java | 12 ++++++++++++ .../beforeCommentInVariableDeclaration.java | 9 +++++++++ .../beforeCommentInVariableDeclaration2.java | 13 +++++++++++++ 5 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/afterCommentInVariableDeclaration.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/afterCommentInVariableDeclaration2.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/beforeCommentInVariableDeclaration.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/beforeCommentInVariableDeclaration2.java diff --git a/java/java-impl/src/com/intellij/codeInspection/intermediaryVariable/ReturnSeparatedFromComputationInspection.java b/java/java-impl/src/com/intellij/codeInspection/intermediaryVariable/ReturnSeparatedFromComputationInspection.java index 7fe120f7a7d6..f73538d3737c 100644 --- a/java/java-impl/src/com/intellij/codeInspection/intermediaryVariable/ReturnSeparatedFromComputationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/intermediaryVariable/ReturnSeparatedFromComputationInspection.java @@ -217,15 +217,24 @@ public class ReturnSeparatedFromComputationInspection extends AbstractBaseJavaLo return; } } + PsiExpression firstInlined = null; boolean isSingleUsage = value != null && usages.size() == 1; if (isSimple || isSingleUsage) { for (PsiReference usage : usages) { PsiExpression inlined = InlineUtil.inlineVariable(context.returnedVariable, value, (PsiJavaCodeReferenceElement)usage); + if (firstInlined == null) firstInlined = inlined; highlighter.add(inlined); } } if (isSimple || isSingleUsage || usages.isEmpty()) { - context.returnedVariable.delete(); + CommentTracker tracker = new CommentTracker(); + if (firstInlined != null) { + tracker.delete(context.returnedVariable); + tracker.insertCommentsBefore(firstInlined); + } + else { + tracker.deleteAndRestoreComments(context.returnedVariable); + } } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/afterCommentInVariableDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/afterCommentInVariableDeclaration.java new file mode 100644 index 000000000000..1e3aaa4bd361 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/afterCommentInVariableDeclaration.java @@ -0,0 +1,8 @@ +// "Move 'return' closer to computation of the value of 'n'" "true" +class T { + int f(int k) { + if (k == 1) + return 1; + return /*comment1*/ -1; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/afterCommentInVariableDeclaration2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/afterCommentInVariableDeclaration2.java new file mode 100644 index 000000000000..6df094816a04 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/afterCommentInVariableDeclaration2.java @@ -0,0 +1,12 @@ +// "Move 'return' closer to computation of the value of 'n'" "true" +class T { + int f(int k) { + if (k == 1) + return 1; + else if (k == 2) + return /*comment1*/ -1; + else if (k == 3) + return 3; + return -1; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/beforeCommentInVariableDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/beforeCommentInVariableDeclaration.java new file mode 100644 index 000000000000..13fed68f9860 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/beforeCommentInVariableDeclaration.java @@ -0,0 +1,9 @@ +// "Move 'return' closer to computation of the value of 'n'" "true" +class T { + int f(int k) { + int n = /*comment1*/-1; + if (k == 1) + n = 1; + return n; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/beforeCommentInVariableDeclaration2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/beforeCommentInVariableDeclaration2.java new file mode 100644 index 000000000000..61629ddc058f --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/returnSeparatedFromComputation/beforeCommentInVariableDeclaration2.java @@ -0,0 +1,13 @@ +// "Move 'return' closer to computation of the value of 'n'" "true" +class T { + int f(int k) { + int n = /*comment1*/-1; + if (k == 1) + n = 1; + else if (k == 2) + return n; + else if (k == 3) + return 3; + return n; + } +} \ No newline at end of file