From 3b10d5408045d407169a6b76bf9bd53248224275 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Mon, 28 Dec 2009 18:18:54 +0300 Subject: [PATCH] additional assertion --- .../psi/impl/source/tree/CompositeElement.java | 5 ++++- .../intellij/psi/impl/source/tree/TreeElement.java | 24 +++++++++++++--------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/CompositeElement.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/CompositeElement.java index 6d1ce9c16f..8c8e2f868a 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/CompositeElement.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/CompositeElement.java @@ -350,7 +350,9 @@ public class CompositeElement extends TreeElement { // up while (cur != this) { CompositeElement parent = cur.getTreeParent(); - parent.myCachedLength -= cur.getCachedLength(); + int curLength = cur.getCachedLength(); + LOG.assertTrue(curLength != NOT_CACHED, cur); + parent.myCachedLength -= curLength; TreeElement next = cur.getTreeNext(); if (next != null) { @@ -358,6 +360,7 @@ public class CompositeElement extends TreeElement { return next; } + LOG.assertTrue(parent.lastChild == cur, parent); parent.myCachedLength = -parent.myCachedLength + NOT_CACHED; cur = parent; diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/TreeElement.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/TreeElement.java index a39e4cb233..6a7d807b86 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/TreeElement.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/TreeElement.java @@ -35,7 +35,7 @@ public abstract class TreeElement extends ElementBase implements ASTNode, Clonea private final IElementType myType; private volatile int myStartOffsetInParent = -1; - protected static final String START_OFFSET_LOCK = new String("TreeElement.START_OFFSET_LOCK"); + @NonNls protected static final String START_OFFSET_LOCK = new String("TreeElement.START_OFFSET_LOCK"); public TreeElement(IElementType type) { myType = type; @@ -99,31 +99,34 @@ public abstract class TreeElement extends ElementBase implements ASTNode, Clonea public final int getStartOffsetInParent() { if (myParent == null) return -1; - int offset = myStartOffsetInParent; - if (offset != -1) return offset; + int offsetInParent = myStartOffsetInParent; + if (offsetInParent != -1) return offsetInParent; synchronized (START_OFFSET_LOCK) { TreeElement cur = this; + offsetInParent = myStartOffsetInParent; + if (offsetInParent != -1) return offsetInParent; while (true) { - if (cur.myStartOffsetInParent != -1) break; TreeElement prev = cur.getTreePrev(); if (prev == null) break; cur = prev; + offsetInParent = cur.myStartOffsetInParent; + if (offsetInParent != -1) break; } - if (cur.myStartOffsetInParent == -1) { - cur.myStartOffsetInParent = 0; + if (offsetInParent == -1) { + cur.myStartOffsetInParent = offsetInParent = 0; } while (cur != this) { TreeElement next = cur.getTreeNext(); - next.myStartOffsetInParent = cur.myStartOffsetInParent + cur.getTextLength(); + offsetInParent += cur.getTextLength(); + next.myStartOffsetInParent = offsetInParent; cur = next; } - return myStartOffsetInParent; + return offsetInParent; } - } public int getTextOffset() { @@ -186,6 +189,7 @@ public abstract class TreeElement extends ElementBase implements ASTNode, Clonea public void clearCaches() { } + @SuppressWarnings({"EqualsWhichDoesntCheckParameterClass"}) public final boolean equals(Object obj) { return obj == this; } @@ -202,7 +206,7 @@ public abstract class TreeElement extends ElementBase implements ASTNode, Clonea if (DebugUtil.shouldTrackInvalidation()) { final Boolean trackInvalidation = getUserData(DebugUtil.TRACK_INVALIDATION_KEY); if (trackInvalidation != null && trackInvalidation) { - //noinspection HardCodedStringLiteral + //noinspection HardCodedStringLiteral,ThrowableInstanceNeverThrown,CallToPrintStackTrace new Throwable("Element invalidated:" + this).printStackTrace(); } } -- 2.11.4.GIT