From 9887620e70f3fc9d16f4e770db243b681c8716bd Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Sun, 14 May 2017 15:07:24 +0300 Subject: [PATCH] removed inheritance on MutableInterval as problematic and highly impl-dependent --- .../openapi/editor/ex/MarkupIterator.java | 7 +++--- .../openapi/editor/ex/RangeMarkerEx.java | 3 +-- .../openapi/editor/impl/IntervalTree.java | 2 +- .../openapi/editor/impl/IntervalTreeImpl.java | 23 +++++++++-------- .../openapi/editor/impl/RangeMarkerImpl.java | 5 ---- .../openapi/editor/impl/RangeMarkerTree.java | 2 +- .../injected/editor/RangeMarkerWindow.java | 25 ------------------- 7 files changed, 18 insertions(+), 49 deletions(-) diff --git a/platform/core-impl/src/com/intellij/openapi/editor/ex/MarkupIterator.java b/platform/core-impl/src/com/intellij/openapi/editor/ex/MarkupIterator.java index 990b92e97b9a..c0123b85a0c9 100644 --- a/platform/core-impl/src/com/intellij/openapi/editor/ex/MarkupIterator.java +++ b/platform/core-impl/src/com/intellij/openapi/editor/ex/MarkupIterator.java @@ -15,7 +15,6 @@ */ package com.intellij.openapi.editor.ex; -import com.intellij.openapi.editor.impl.MutableInterval; import com.intellij.util.containers.PeekableIterator; import org.jetbrains.annotations.NotNull; @@ -55,9 +54,9 @@ public interface MarkupIterator extends PeekableIterator { }; @NotNull - static MarkupIterator mergeIterators(@NotNull final MarkupIterator iterator1, - @NotNull final MarkupIterator iterator2, - @NotNull final Comparator comparator) { + static MarkupIterator mergeIterators(@NotNull final MarkupIterator iterator1, + @NotNull final MarkupIterator iterator2, + @NotNull final Comparator comparator) { return new MarkupIterator() { @Override public void dispose() { diff --git a/platform/core-impl/src/com/intellij/openapi/editor/ex/RangeMarkerEx.java b/platform/core-impl/src/com/intellij/openapi/editor/ex/RangeMarkerEx.java index d1beddf31dfd..3b517f3c84e2 100644 --- a/platform/core-impl/src/com/intellij/openapi/editor/ex/RangeMarkerEx.java +++ b/platform/core-impl/src/com/intellij/openapi/editor/ex/RangeMarkerEx.java @@ -18,11 +18,10 @@ package com.intellij.openapi.editor.ex; import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.editor.event.DocumentEvent; -import com.intellij.openapi.editor.impl.MutableInterval; import com.intellij.openapi.util.Segment; import org.jetbrains.annotations.NotNull; -public interface RangeMarkerEx extends RangeMarker, MutableInterval, Segment { +public interface RangeMarkerEx extends RangeMarker, Segment { void documentChanged(@NotNull DocumentEvent e); long getId(); diff --git a/platform/core-impl/src/com/intellij/openapi/editor/impl/IntervalTree.java b/platform/core-impl/src/com/intellij/openapi/editor/impl/IntervalTree.java index 11c439bae394..607fda15e055 100644 --- a/platform/core-impl/src/com/intellij/openapi/editor/impl/IntervalTree.java +++ b/platform/core-impl/src/com/intellij/openapi/editor/impl/IntervalTree.java @@ -18,7 +18,7 @@ package com.intellij.openapi.editor.impl; import com.intellij.util.Processor; import org.jetbrains.annotations.NotNull; -interface IntervalTree { +interface IntervalTree { boolean process(@NotNull Processor processor); boolean processOverlappingWith(int start, int end, @NotNull Processor processor); boolean processContaining(int offset, @NotNull Processor processor); diff --git a/platform/core-impl/src/com/intellij/openapi/editor/impl/IntervalTreeImpl.java b/platform/core-impl/src/com/intellij/openapi/editor/impl/IntervalTreeImpl.java index 51ffb06378e6..f8aea5c1fd2a 100644 --- a/platform/core-impl/src/com/intellij/openapi/editor/impl/IntervalTreeImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/editor/impl/IntervalTreeImpl.java @@ -19,6 +19,7 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.ex.MarkupIterator; +import com.intellij.openapi.editor.ex.RangeMarkerEx; import com.intellij.openapi.util.Getter; import com.intellij.util.IncorrectOperationException; import com.intellij.util.Processor; @@ -41,7 +42,7 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; -abstract class IntervalTreeImpl extends RedBlackTree implements IntervalTree { +abstract class IntervalTreeImpl extends RedBlackTree implements IntervalTree { static final Logger LOG = Logger.getInstance("#com.intellij.openapi.editor.impl.RangeMarkerTree"); static final boolean DEBUG = LOG.isDebugEnabled() || ApplicationManager.getApplication() != null && (ApplicationManager.getApplication().isUnitTestMode() || ApplicationManager.getApplication().isInternal()); private int keySize; // number of all intervals, counting all duplicates, some of them maybe gced @@ -51,7 +52,7 @@ abstract class IntervalTreeImpl extends RedBlackTree< private final ReferenceQueue myReferenceQueue = new ReferenceQueue<>(); private int deadReferenceCount; - static class IntervalNode extends RedBlackTree.Node implements MutableInterval { + static class IntervalNode extends RedBlackTree.Node implements MutableInterval { private volatile int myStart; private volatile int myEnd; private static final byte ATTACHED_TO_TREE_FLAG = COLOR_MASK <<1; // true if the node is inserted to the tree @@ -142,7 +143,7 @@ abstract class IntervalTreeImpl extends RedBlackTree< return false; } } - assert false: "interval not found: "+key +"; "+ intervals+"; isValid="+key.isValid(); + assert false: "interval not found: "+key +"; "+ intervals; return false; } private boolean isAttachedToTree() { @@ -936,11 +937,11 @@ abstract class IntervalTreeImpl extends RedBlackTree< @Override public boolean removeInterval(@NotNull T interval) { - if (!interval.isValid()) return false; + if (!((RangeMarkerEx)interval).isValid()) return false; try { l.writeLock().lock(); modCount++; - if (!interval.isValid()) return false; + if (!((RangeMarkerEx)interval).isValid()) return false; checkBelongsToTheTree(interval, true); checkMax(true); processReferenceQueue(); @@ -1347,7 +1348,7 @@ abstract class IntervalTreeImpl extends RedBlackTree< private static final IntervalTreeGuide INTERVAL_TREE_GUIDE_INSTANCE = new IntervalTreeGuide(); @NotNull - private static WalkingState.TreeGuide> getGuide() { + private static WalkingState.TreeGuide> getGuide() { //noinspection unchecked return (WalkingState.TreeGuide)INTERVAL_TREE_GUIDE_INSTANCE; } @@ -1363,11 +1364,11 @@ abstract class IntervalTreeImpl extends RedBlackTree< // combines iterators for two trees in one using specified comparator @NotNull - static MarkupIterator mergingOverlappingIterator(@NotNull IntervalTreeImpl tree1, - @NotNull TextRangeInterval tree1Range, - @NotNull IntervalTreeImpl tree2, - @NotNull TextRangeInterval tree2Range, - @NotNull Comparator comparator) { + static MarkupIterator mergingOverlappingIterator(@NotNull IntervalTreeImpl tree1, + @NotNull TextRangeInterval tree1Range, + @NotNull IntervalTreeImpl tree2, + @NotNull TextRangeInterval tree2Range, + @NotNull Comparator comparator) { MarkupIterator exact = tree1.overlappingIterator(tree1Range); MarkupIterator lines = tree2.overlappingIterator(tree2Range); return MarkupIterator.mergeIterators(exact, lines, comparator); diff --git a/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerImpl.java b/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerImpl.java index d41f3552ea89..5d3f29a3d8b0 100644 --- a/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerImpl.java @@ -260,7 +260,6 @@ public class RangeMarkerImpl extends UserDataHolderBase implements RangeMarkerEx + (isGreedyToRight() ? "]" : ")") + " " + getId(); } - @Override public int setIntervalStart(int start) { if (start < 0) { LOG.error("Negative start: " + start); @@ -268,7 +267,6 @@ public class RangeMarkerImpl extends UserDataHolderBase implements RangeMarkerEx return myNode.setIntervalStart(start); } - @Override public int setIntervalEnd(int end) { if (end < 0) { LOG.error("Negative end: "+end); @@ -282,13 +280,11 @@ public class RangeMarkerImpl extends UserDataHolderBase implements RangeMarkerEx return node != null && node.isValid(); } - @Override public boolean setValid(boolean value) { RangeMarkerTree.RMNode node = myNode; return node == null || node.setValid(value); } - @Override public int intervalStart() { RangeMarkerTree.RMNode node = myNode; if (node == null) { @@ -297,7 +293,6 @@ public class RangeMarkerImpl extends UserDataHolderBase implements RangeMarkerEx return node.intervalStart(); } - @Override public int intervalEnd() { RangeMarkerTree.RMNode node = myNode; if (node == null) { diff --git a/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerTree.java b/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerTree.java index e1b0272bb955..83f2b7284574 100644 --- a/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerTree.java +++ b/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerTree.java @@ -85,7 +85,7 @@ public class RangeMarkerTree extends IntervalTreeImpl addInterval(@NotNull T interval, int start, int end, boolean greedyToLeft, boolean greedyToRight, int layer) { - interval.setValid(true); + ((RangeMarkerImpl)interval).setValid(true); RMNode node = (RMNode)super.addInterval(interval, start, end, greedyToLeft, greedyToRight, layer); if (DEBUG && node.intervals.size() > DUPLICATE_LIMIT && !ApplicationInfoImpl.isInStressTest() && ApplicationManager.getApplication().isUnitTestMode()) { diff --git a/platform/lang-impl/src/com/intellij/injected/editor/RangeMarkerWindow.java b/platform/lang-impl/src/com/intellij/injected/editor/RangeMarkerWindow.java index 8f7ae16286de..6b610504ecc9 100644 --- a/platform/lang-impl/src/com/intellij/injected/editor/RangeMarkerWindow.java +++ b/platform/lang-impl/src/com/intellij/injected/editor/RangeMarkerWindow.java @@ -77,11 +77,6 @@ class RangeMarkerWindow implements RangeMarkerEx { return startOffset <= endOffset && endOffset <= myDocumentWindow.getTextLength(); } - @Override - public boolean setValid(boolean value) { - return myHostMarker.setValid(value); - } - ////////////////////////////delegates @Override public void setGreedyToLeft(final boolean greedy) { @@ -126,26 +121,6 @@ class RangeMarkerWindow implements RangeMarkerEx { return myHostMarker.isGreedyToLeft(); } - @Override - public int intervalStart() { - return getStartOffset(); - } - - @Override - public int intervalEnd() { - return getEndOffset(); - } - - @Override - public int setIntervalStart(int start) { - throw new IllegalStateException(); - } - - @Override - public int setIntervalEnd(int end) { - throw new IllegalStateException(); - } - @Override public void dispose() { myHostMarker.dispose();