diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/UnrollLoopAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/UnrollLoopAction.java index 2a019e6bd62c..86571281a5f7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/UnrollLoopAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/UnrollLoopAction.java @@ -206,7 +206,6 @@ public class UnrollLoopAction extends PsiElementBaseIntentionAction { CommentTracker ct = new CommentTracker(); PsiElement anchor = loop; for (PsiExpression expression : expressions) { - ct.markUnchanged(loop.getBody()); PsiLoopStatement copy = (PsiLoopStatement)factory.createStatementFromText(loop.getText(), element); PsiVariable variable = Objects.requireNonNull(getVariable(copy)); for (PsiReference reference : ReferencesSearch.search(variable, new LocalSearchScope(copy))) { @@ -220,10 +219,17 @@ public class UnrollLoopAction extends PsiElementBaseIntentionAction { assert body != null; PsiElement[] children; if (body instanceof PsiBlockStatement) { + PsiCodeBlock block = ((PsiBlockStatement)Objects.requireNonNull(loop.getBody())).getCodeBlock(); + PsiElement firstBodyElement = block.getFirstBodyElement(); + PsiElement lastBodyElement = block.getLastBodyElement(); + if (firstBodyElement != null && lastBodyElement != null) { + ct.markRangeUnchanged(firstBodyElement, lastBodyElement); + } children = ((PsiBlockStatement)body).getCodeBlock().getChildren(); // Skip {braces} children = Arrays.copyOfRange(children, 1, children.length-1); } else { + ct.markUnchanged(loop.getBody()); children = new PsiElement[]{body}; } for(PsiElement child : children) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unrollLoop/afterUnrollBreak.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unrollLoop/afterUnrollBreak.java index b0ba681d1014..1d51c0cb5d50 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unrollLoop/afterUnrollBreak.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unrollLoop/afterUnrollBreak.java @@ -12,7 +12,7 @@ class Test { } } } - } + }//Comment } void foo(boolean b) {} diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unrollLoop/beforeUnrollBreak.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unrollLoop/beforeUnrollBreak.java index 099bb21eb2ac..0b30dbaf1246 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unrollLoop/beforeUnrollBreak.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unrollLoop/beforeUnrollBreak.java @@ -4,7 +4,7 @@ class Test { for(Object x : new Object[] {"one", 1, 1.0, 1.0f}) { if(Math.random() > 0.5) break; System.out.println(x); - } + }//Comment } void foo(boolean b) {}