Fragment () { if (!hasNext()) throw new NoSuchElementException(); myPrevX = myCurrentX; if (mySegmentStartOffset == getCurrentFoldRegionStartOffset()) { myDelegate = null; myFoldRegion = myRegions[myCurrentFoldRegionIndex]; assert myFoldRegion.isValid(); myFoldRegionColumns = getFoldRegionWidthInColumns(); mySegmentStartOffset = myFoldRegion.getEndOffset(); myCurrentX += getFoldRegionWidthInPixels(); myCurrentVisualColumn += myFoldRegionColumns; myCurrentStartLogicalLine = myCurrentEndLogicalLine; myCurrentEndLogicalLine = myDocument.getLineNumber(mySegmentStartOffset); myCurrentFoldRegionIndex++; myFragmentIterator = null; myCurrentInlayIndex = 0; setInlaysAndFragmentIterator(); } else if (myFragmentIterator == null) { myDelegate = null; myFoldRegion = null; myCurrentStartLogicalLine = myCurrentEndLogicalLine; Inlay inlay = myInlays.get(myCurrentInlayIndex); myCurrentX += alignToInt(inlay.getWidthInPixels()); myCurrentVisualColumn++; myCurrentInlayIndex++; if (myCurrentInlayIndex >= myInlays.size() || myInlays.get(myCurrentInlayIndex).getOffset() > inlay.getOffset()) { setFragmentIterator(); } } else { myDelegate = myFragmentIterator.next(); myFoldRegion = null; myCurrentX = myDelegate.getEndX(); myCurrentVisualColumn = myDelegate.getEndVisualColumn(); myCurrentStartLogicalLine = myCurrentEndLogicalLine; if (!myFragmentIterator.hasNext()) { if (myCurrentInlayIndex < myInlays.size()) { myFragmentIterator = null; } else { mySegmentStartOffset = mySegmentEndOffset; } } } myCurrentStartLogicalLineStart = myDocument.getLineStartOffset(myCurrentStartLogicalLine); return myFragment; }