diff --git a/source/com/intellij/openapi/editor/impl/EditorImpl.java b/source/com/intellij/openapi/editor/impl/EditorImpl.java index 532cc95db9bf..e3d9af46def7 100644 --- a/source/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/source/com/intellij/openapi/editor/impl/EditorImpl.java @@ -70,7 +70,7 @@ public class EditorImpl implements EditorEx { private EditorComponentImpl myEditorComponent; private EditorGutterComponentImpl myGutterComponent; - + private CommandProcessor myCommandProcessor; private MyScrollBar myVerticalScrollBar; private MyScrollBar myHorizontalScrollBar; diff --git a/source/com/intellij/psi/impl/source/tree/CompositeElement.java b/source/com/intellij/psi/impl/source/tree/CompositeElement.java index 0f6b4d55a47e..66c727af1c11 100644 --- a/source/com/intellij/psi/impl/source/tree/CompositeElement.java +++ b/source/com/intellij/psi/impl/source/tree/CompositeElement.java @@ -59,21 +59,21 @@ public class CompositeElement extends TreeElement implements Cloneable { } public Object clone() { - CompositeElement clone = (CompositeElement)super.clone(); + CompositeElement clone = (CompositeElement)super.clone(); - synchronized (PsiLock.LOCK) { - clone.clearCaches(); - clone.parent = null; - clone.prev = null; - clone.firstChild = null; - clone.lastChild = null; - clone.myModificationsCount = 0; - clone.myParentModifications = -1; - for (ASTNode child = getFirstChildNode(); child != null; child = child.getTreeNext()) { - TreeUtil.addChildren(clone, (TreeElement)child.clone()); + synchronized (PsiLock.LOCK) { + clone.clearCaches(); + clone.parent = null; + clone.prev = null; + clone.firstChild = null; + clone.lastChild = null; + clone.myModificationsCount = 0; + clone.myParentModifications = -1; + for (ASTNode child = getFirstChildNode(); child != null; child = child.getTreeNext()) { + TreeUtil.addChildren(clone, (TreeElement)child.clone()); + } } - } - return clone; + return clone; } public void subtreeChanged() { @@ -113,23 +113,23 @@ public class CompositeElement extends TreeElement implements Cloneable { public LeafElement findLeafElementAt(int offset) { - synchronized (PsiLock.LOCK) { - final CharTable table = SharedImplUtil.findCharTableByTree(this); - TreeElement child = firstChild; - while (child != null) { - final int textLength = child.getTextLength(table); - if (textLength > offset) { - if (child instanceof ChameleonElement) { - child = ChameleonTransforming.transform((ChameleonElement)child); - continue; + synchronized (PsiLock.LOCK) { + final CharTable table = SharedImplUtil.findCharTableByTree(this); + TreeElement child = firstChild; + while (child != null) { + final int textLength = child.getTextLength(table); + if (textLength > offset) { + if (child instanceof ChameleonElement) { + child = ChameleonTransforming.transform((ChameleonElement)child); + continue; + } + return child.findLeafElementAt(offset); } - return child.findLeafElementAt(offset); + offset -= textLength; + child = child.getTreeNext(); } - offset -= textLength; - child = child.getTreeNext(); + return null; } - return null; - } } public String getText() { @@ -137,21 +137,21 @@ public class CompositeElement extends TreeElement implements Cloneable { } public String getText(CharTable table) { - synchronized (PsiLock.LOCK) { - // check if all elements are laid out consequently in the same buffer (optimization): - char[] buffer = new char[getTextLength()]; - SourceUtil.toBuffer(this, buffer, 0, table); - //return StringFactory.createStringFromConstantArray(buffer); - return new String(buffer); - } + synchronized (PsiLock.LOCK) { + // check if all elements are laid out consequently in the same buffer (optimization): + char[] buffer = new char[getTextLength()]; + SourceUtil.toBuffer(this, buffer, 0, table); + //return StringFactory.createStringFromConstantArray(buffer); + return new String(buffer); + } } public char[] textToCharArray() { - synchronized (PsiLock.LOCK) { - char[] buffer = new char[getTextLength()]; - SourceUtil.toBuffer(this, buffer, 0); - return buffer; - } + synchronized (PsiLock.LOCK) { + char[] buffer = new char[getTextLength()]; + SourceUtil.toBuffer(this, buffer, 0); + return buffer; + } } public boolean textContains(char c) { @@ -165,13 +165,13 @@ public class CompositeElement extends TreeElement implements Cloneable { } public ASTNode findChildByRole(int role) { - LOG.assertTrue(ChildRole.isUnique(role)); - synchronized (PsiLock.LOCK) { - for (ASTNode child = getFirstChildNode(); child != null; child = child.getTreeNext()) { - if (getChildRole(child) == role) return child; + LOG.assertTrue(ChildRole.isUnique(role)); + synchronized (PsiLock.LOCK) { + for (ASTNode child = getFirstChildNode(); child != null; child = child.getTreeNext()) { + if (getChildRole(child) == role) return child; + } } - } - return null; + return null; } public int getChildRole(ASTNode child) { @@ -291,13 +291,13 @@ public class CompositeElement extends TreeElement implements Cloneable { } protected int getLengthInner(CharTable charTableByTree) { - synchronized (PsiLock.LOCK) { - int length = 0; - for (TreeElement child = firstChild; child != null; child = child.getTreeNext()) { - length += child.getTextLength(charTableByTree); + synchronized (PsiLock.LOCK) { + int length = 0; + for (TreeElement child = firstChild; child != null; child = child.getTreeNext()) { + length += child.getTextLength(charTableByTree); + } + return length; } - return length; - } } public void setCachedLength(int length) { diff --git a/source/com/intellij/psi/impl/source/xml/XmlTextImpl.java b/source/com/intellij/psi/impl/source/xml/XmlTextImpl.java index 8280321263ab..974c538086cb 100644 --- a/source/com/intellij/psi/impl/source/xml/XmlTextImpl.java +++ b/source/com/intellij/psi/impl/source/xml/XmlTextImpl.java @@ -198,17 +198,17 @@ public class XmlTextImpl extends XmlElementImpl implements XmlText { final ASTNode compositeElement = SourceTreeToPsiMap.psiElementToTree(xmlText); TreeUtil.removeRange((TreeElement)compositeElement.getFirstChildNode(), null); model.runTransaction(new PomTransactionBase(this) { - public PomModelEvent run() { - ASTNode current = second; - while (current != null) { - final ASTNode next = current.getTreeNext(); - removeChild(current); - compositeElement.addChild(current, null); - current = next; - } - return XmlTextChanged.createXmlTextChanged(model, XmlTextImpl.this, oldText); - } - }, aspect); + public PomModelEvent run() { + ASTNode current = second; + while (current != null) { + final ASTNode next = current.getTreeNext(); + removeChild(current); + compositeElement.addChild(current, null); + current = next; + } + return XmlTextChanged.createXmlTextChanged(model, XmlTextImpl.this, oldText); + } + }, aspect); XmlElement xmlElement = (XmlElement)parent.addAfter(element, this); parent.addAfter(xmlText, xmlElement); @@ -220,11 +220,11 @@ public class XmlTextImpl extends XmlElementImpl implements XmlText { } else { model.runTransaction(new PomTransactionBase(this) { - public PomModelEvent run() { - retHolder[0] = addInternal((TreeElement)insertedElement, insertedElement, retHolder[0], Boolean.TRUE); - return XmlTextChanged.createXmlTextChanged(model, XmlTextImpl.this, oldText); - } - }, aspect); + public PomModelEvent run() { + retHolder[0] = addInternal((TreeElement)insertedElement, insertedElement, retHolder[0], Boolean.TRUE); + return XmlTextChanged.createXmlTextChanged(model, XmlTextImpl.this, oldText); + } + }, aspect); } return (XmlElement)SourceTreeToPsiMap.treeElementToPsi(retHolder[0]); } @@ -304,79 +304,79 @@ public class XmlTextImpl extends XmlElementImpl implements XmlText { try { model.runTransaction(new PomTransactionBase(getParent()) { - public PomModelEvent run() throws IncorrectOperationException { - final String oldText = getText(); + public PomModelEvent run() throws IncorrectOperationException { + final String oldText = getText(); - final LeafElement firstAffectedLeaf = findLeafElementAt(start); - final LeafElement lastAffectedLeaf; - final int lastAffectedLeafOffset; - final int startOffsetInStartToken = start - firstAffectedLeaf.getStartOffsetInParent(); - { - // remove elements inside the affected area - LeafElement current = firstAffectedLeaf; - int endOffset = current.getStartOffsetInParent(); + final LeafElement firstAffectedLeaf = findLeafElementAt(start); + final LeafElement lastAffectedLeaf; + final int lastAffectedLeafOffset; + final int startOffsetInStartToken = start - firstAffectedLeaf.getStartOffsetInParent(); + { + // remove elements inside the affected area + LeafElement current = firstAffectedLeaf; + int endOffset = current.getStartOffsetInParent(); - while (current != null && (endOffset += current.getTextLength(table)) <= end) { - final LeafElement toDelete = current; - current = (LeafElement)current.getTreeNext(); - if (toDelete != firstAffectedLeaf) removeChild(toDelete); - } - lastAffectedLeaf = current; - lastAffectedLeafOffset = endOffset - (current != null ? current.getTextLength(table) : 0); - } + while (current != null && (endOffset += current.getTextLength(table)) <= end) { + final LeafElement toDelete = current; + current = (LeafElement)current.getTreeNext(); + if (toDelete != firstAffectedLeaf) removeChild(toDelete); + } + lastAffectedLeaf = current; + lastAffectedLeafOffset = endOffset - (current != null ? current.getTextLength(table) : 0); + } - LeafElement tokenToChange; - int deletedAreaStartOffset = 0; - int deletedAreaEndOffset = 0; - if (lastAffectedLeafOffset < end && lastAffectedLeaf != firstAffectedLeaf) { - // merging tokens - final LeafElement merged = mergeElements(firstAffectedLeaf, lastAffectedLeaf, table); - if (merged == null) { - removeChild(split(firstAffectedLeaf, startOffsetInStartToken)); - removeChild(split(lastAffectedLeaf, end - lastAffectedLeafOffset).getTreePrev()); - } - else { - ChangeUtil.replaceAll(new LeafElement[]{firstAffectedLeaf, lastAffectedLeaf}, merged); - deletedAreaStartOffset = startOffsetInStartToken; - deletedAreaEndOffset = end - lastAffectedLeafOffset + firstAffectedLeaf.getTextLength(table) - - startOffsetInStartToken; - } - tokenToChange = merged; - } - else { - // replacing first token - tokenToChange = firstAffectedLeaf; - final int textLength = firstAffectedLeaf.getTextLength(table); - deletedAreaStartOffset = startOffsetInStartToken; - deletedAreaEndOffset = Math.min(end - firstAffectedLeaf.getStartOffsetInParent(), textLength); - } + LeafElement tokenToChange; + int deletedAreaStartOffset = 0; + int deletedAreaEndOffset = 0; + if (lastAffectedLeafOffset < end && lastAffectedLeaf != firstAffectedLeaf) { + // merging tokens + final LeafElement merged = mergeElements(firstAffectedLeaf, lastAffectedLeaf, table); + if (merged == null) { + removeChild(split(firstAffectedLeaf, startOffsetInStartToken)); + removeChild(split(lastAffectedLeaf, end - lastAffectedLeafOffset).getTreePrev()); + } + else { + ChangeUtil.replaceAll(new LeafElement[]{firstAffectedLeaf, lastAffectedLeaf}, merged); + deletedAreaStartOffset = startOffsetInStartToken; + deletedAreaEndOffset = end - lastAffectedLeafOffset + firstAffectedLeaf.getTextLength(table) - + startOffsetInStartToken; + } + tokenToChange = merged; + } + else { + // replacing first token + tokenToChange = firstAffectedLeaf; + final int textLength = firstAffectedLeaf.getTextLength(table); + deletedAreaStartOffset = startOffsetInStartToken; + deletedAreaEndOffset = Math.min(end - firstAffectedLeaf.getStartOffsetInParent(), textLength); + } - if (tokenToChange != null) { - final int textLength = tokenToChange.getTextLength(table); - if (deletedAreaStartOffset > 0 || deletedAreaEndOffset < textLength) { - String text = tokenToChange.getText(table); - text = text.substring(0, deletedAreaStartOffset) + text.substring(deletedAreaEndOffset); - final LeafElement newLeaf = Factory.createSingleLeafElement(firstAffectedLeaf.getElementType(), - text.toCharArray(), 0, text.length(), table, - null); - replaceChild(tokenToChange, newLeaf); - } - else { - final ASTNode treeNext = tokenToChange.getTreeNext(); - final ASTNode treePrev = tokenToChange.getTreePrev(); - final LeafElement merged = mergeElements((LeafElement)treePrev, (LeafElement)treeNext, table); - removeChild(tokenToChange); - if (merged != null) { - ChangeUtil.replaceAll(new LeafElement[]{(LeafElement)treePrev, - (LeafElement)treeNext}, - merged); - } - } - } + if (tokenToChange != null) { + final int textLength = tokenToChange.getTextLength(table); + if (deletedAreaStartOffset > 0 || deletedAreaEndOffset < textLength) { + String text = tokenToChange.getText(table); + text = text.substring(0, deletedAreaStartOffset) + text.substring(deletedAreaEndOffset); + final LeafElement newLeaf = Factory.createSingleLeafElement(firstAffectedLeaf.getElementType(), + text.toCharArray(), 0, text.length(), table, + null); + replaceChild(tokenToChange, newLeaf); + } + else { + final ASTNode treeNext = tokenToChange.getTreeNext(); + final ASTNode treePrev = tokenToChange.getTreePrev(); + final LeafElement merged = mergeElements((LeafElement)treePrev, (LeafElement)treeNext, table); + removeChild(tokenToChange); + if (merged != null) { + ChangeUtil.replaceAll(new LeafElement[]{(LeafElement)treePrev, + (LeafElement)treeNext}, + merged); + } + } + } - return XmlTextChanged.createXmlTextChanged(model, XmlTextImpl.this, oldText); - } - }, aspect); + return XmlTextChanged.createXmlTextChanged(model, XmlTextImpl.this, oldText); + } + }, aspect); } catch (IncorrectOperationException e) { LOG.error(e); @@ -448,8 +448,8 @@ public class XmlTextImpl extends XmlElementImpl implements XmlText { ASTNode childBefore = (anchor != null ? (before ? anchor.getTreePrev() : anchor) : getLastChildNode()); if (childBefore != null && childBefore.getElementType() == text.getFirstChildNode().getElementType()) { final LeafElement newText = - mergeElements((LeafElement)childBefore, (LeafElement)text.getFirstChildNode(), - SharedImplUtil.findCharTableByTree(XmlTextImpl.this)); + mergeElements((LeafElement)childBefore, (LeafElement)text.getFirstChildNode(), + SharedImplUtil.findCharTableByTree(XmlTextImpl.this)); if (newText != null) { replaceChildInternal(childBefore, newText); if (text.getLastChildNode() != text.getFirstChildNode()) { @@ -465,8 +465,8 @@ public class XmlTextImpl extends XmlElementImpl implements XmlText { ASTNode childAfter = (anchor != null ? (before ? anchor : anchor.getTreeNext()) : getLastChildNode()); if (childAfter != null && childAfter.getElementType() == text.getFirstChildNode().getElementType()) { final LeafElement newText = - mergeElements((LeafElement)text.getFirstChildNode(), (LeafElement)childAfter, - SharedImplUtil.findCharTableByTree(XmlTextImpl.this)); + mergeElements((LeafElement)text.getFirstChildNode(), (LeafElement)childAfter, + SharedImplUtil.findCharTableByTree(XmlTextImpl.this)); if (newText != null) { replaceChildInternal(childAfter, newText); if (text.getLastChildNode() != text.getFirstChildNode()) { @@ -489,13 +489,13 @@ public class XmlTextImpl extends XmlElementImpl implements XmlText { } else { model.runTransaction(new PomTransactionBase(this) { - public PomModelEvent run() { - final String oldText = getText(); - final TreeElement treeElement = addChildren(XmlTextImpl.this, child, child.getTreeNext(), anchor, before); - retHolder[0] = treeElement; - return XmlTextChanged.createXmlTextChanged(model, XmlTextImpl.this, oldText); - } - }, aspect); + public PomModelEvent run() { + final String oldText = getText(); + final TreeElement treeElement = addChildren(XmlTextImpl.this, child, child.getTreeNext(), anchor, before); + retHolder[0] = treeElement; + return XmlTextChanged.createXmlTextChanged(model, XmlTextImpl.this, oldText); + } + }, aspect); } return retHolder[0]; }