diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java index ac4a41417362..144d3483c4e6 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java @@ -755,8 +755,13 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase if (parent instanceof PsiClass) break; endElement = parent; } - myElement.getParent().deleteChildRange(myElement, PsiTreeUtil.skipSiblingsBackward(endElement, PsiWhiteSpace.class)); - } else if (myDeleteSelf) { + PsiElement last = PsiTreeUtil.skipSiblingsBackward(endElement, PsiWhiteSpace.class); + if (last.getTextRange().getStartOffset() < myElement.getTextRange().getStartOffset()) { + last = myElement; + } + myElement.getParent().deleteChildRange(myElement, last); + } + else if (myDeleteSelf) { myElement.getParent().delete(); } diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/codeStyle/CodeEditUtil.java b/platform/core-impl/src/com/intellij/psi/impl/source/codeStyle/CodeEditUtil.java index 0a9ec4e8de95..e9e295c5394f 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/source/codeStyle/CodeEditUtil.java +++ b/platform/core-impl/src/com/intellij/psi/impl/source/codeStyle/CodeEditUtil.java @@ -154,6 +154,7 @@ public class CodeEditUtil { if (child == last) break; child = child.getTreeNext(); } + assert child == last : last + " is not a successor of " + first +" in the .getTreeNext() chain"; final ASTNode prevLeaf = TreeUtil.prevLeaf(first); final ASTNode nextLeaf = TreeUtil.nextLeaf(first); diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/tree/TreeElement.java b/platform/core-impl/src/com/intellij/psi/impl/source/tree/TreeElement.java index a7a8a275b951..75db028e75fd 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/source/tree/TreeElement.java +++ b/platform/core-impl/src/com/intellij/psi/impl/source/tree/TreeElement.java @@ -354,6 +354,11 @@ public abstract class TreeElement extends ElementBase implements ASTNode, Clonea assert end == null || end.getTreeParent() == parent : "Trying to remove non-child"; + if (end != null) { + TreeElement element; + for (element = this; element != end && element != null; element = element.getTreeNext()); + assert element == end : end + " is not successor of " + this +" in the .getTreeNext() chain"; + } if (parent != null){ if (this == parent.getFirstChildNode()) { parent.setFirstChildNode(end);