From cd4c8cd824948746ae417b6181814a7dc059944e Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 4 Apr 2012 12:18:52 +0400 Subject: [PATCH] exception from refactoring in IDEA-80181 --- .../introduceField/BaseExpressionToFieldHandler.java | 9 +++++++-- .../intellij/psi/impl/source/codeStyle/CodeEditUtil.java | 1 + .../com/intellij/psi/impl/source/tree/TreeElement.java | 5 +++++ 3 files changed, 13 insertions(+), 2 deletions(-) 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);