diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java index e1549565c3c8..41fcf11be5c0 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java @@ -203,6 +203,7 @@ public abstract class LocalToFieldHandler { } else { assignment = (PsiStatement)body.add(assignment); } + appendComments(local, assignment); local.delete(); return assignment; } @@ -228,14 +229,18 @@ public abstract class LocalToFieldHandler { continue; } if ("super".equals(text) && enclosingConstructor == null && PsiTreeUtil.isAncestor(constructor, local, false)) { + final PsiStatement statement = (PsiStatement)body.addAfter(assignment, first); + appendComments(local, statement); local.delete(); - return (PsiStatement)body.addAfter(assignment, first); + return statement; } } } if (enclosingConstructor == null && PsiTreeUtil.isAncestor(constructor, local, false)) { + final PsiStatement statement = (PsiStatement)body.addBefore(assignment, first); + appendComments(local, statement); local.delete(); - return (PsiStatement)body.addBefore(assignment, first); + return statement; } } @@ -252,7 +257,10 @@ public abstract class LocalToFieldHandler { } } - if (enclosingConstructor == null) local.delete(); + if (enclosingConstructor == null) { + appendComments(assignment, local); + local.delete(); + } return assignment; } @@ -319,14 +327,14 @@ public abstract class LocalToFieldHandler { switch (finalInitializerPlace) { case IN_FIELD_DECLARATION: - appendComments(declarationStatement); + appendComments(declarationStatement, myField); declarationStatement.delete(); break; case IN_CURRENT_METHOD: PsiExpressionStatement statement = createAssignment(myLocal, myFieldName, factory); + appendComments(declarationStatement, declarationStatement); if (declarationStatement instanceof PsiDeclarationStatement) { - appendComments(declarationStatement); declarationStatement.replace(statement); } else { myLocal.replace(statement.getExpression()); @@ -367,11 +375,11 @@ public abstract class LocalToFieldHandler { } } - private static void appendComments(PsiElement declarationStatement) { + private static void appendComments(PsiElement declarationStatement, PsiElement element) { final Collection comments = PsiTreeUtil.findChildrenOfType(declarationStatement, PsiComment.class); - final PsiElement parent = declarationStatement.getParent(); + final PsiElement parent = element.getParent(); for (PsiComment comment : comments) { - parent.addBefore(comment, declarationStatement); + parent.addBefore(comment, element); } } } diff --git a/java/java-tests/testData/refactoring/introduceConstant/Comments_after.java b/java/java-tests/testData/refactoring/introduceConstant/Comments_after.java index ff2bab0c4297..8a3430822e10 100644 --- a/java/java-tests/testData/refactoring/introduceConstant/Comments_after.java +++ b/java/java-tests/testData/refactoring/introduceConstant/Comments_after.java @@ -1,7 +1,7 @@ class Test { + /*and comment here*///comment public static final String xxx = ""; { - /*and comment here*///comment } } \ No newline at end of file