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