diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java
index ff2b6a12f776..b22f109a841f 100644
--- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java
+++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java
@@ -15,6 +15,7 @@
*/
package com.intellij.openapi.editor.impl;
+import com.intellij.diagnostic.Dumpable;
import com.intellij.diagnostic.LogMessageEx;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.application.ApplicationManager;
@@ -47,7 +48,7 @@ import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.util.List;
-public class CaretImpl extends UserDataHolderBase implements Caret {
+public class CaretImpl extends UserDataHolderBase implements Caret, Dumpable {
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.editor.impl.CaretImpl");
private final EditorImpl myEditor;
@@ -1484,6 +1485,33 @@ public class CaretImpl extends UserDataHolderBase implements Caret {
return myEditor.myUseNewRendering && myEditor.myView.isAtBidiRunBoundary(myVisibleCaret);
}
+ @NotNull
+ @Override
+ public String dumpState() {
+ return "{valid: " + isValid +
+ ", offset: " + myOffset +
+ ", logical pos: " + myLogicalCaret +
+ ", visual pos: " + myVisibleCaret +
+ ", visual line start: " + myVisualLineStart +
+ ", visual line end: " + myVisualLineEnd +
+ ", savedBeforeBulkCaretMarker: " + savedBeforeBulkCaretMarker +
+ ", skip change requests: " + mySkipChangeRequests +
+ ", desired selection start column: " + myDesiredSelectionStartColumn +
+ ", desired selection end column: " + myDesiredSelectionEndColumn +
+ ", report caret moves: " + myReportCaretMoves +
+ ", desired x: " + myDesiredX +
+ ", selection marker: " + mySelectionMarker +
+ ", rangeMarker start position: " + myRangeMarkerStartPosition +
+ ", rangeMarker end position: " + myRangeMarkerEndPosition +
+ ", rangeMarker end position is lead: " + myRangeMarkerEndPositionIsLead +
+ ", selection start before change: " + startBefore +
+ ", selection end after change: " + endBefore +
+ ", unknown direction: " + myUnknownDirection +
+ ", virtual space offset: " + myVirtualSpaceOffset +
+ ", virtual selection start offset: " + myStartVirtualOffset +
+ ", virtual selection end offset: " + myEndVirtualOffset + '}';
+ }
+
/**
* Encapsulates information about target vertical range info - its 'y' coordinate and height in pixels.
*/
diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java
index 81f1d2ec873a..dde8d538cfcc 100644
--- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java
+++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2014 JetBrains s.r.o.
+ * Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@
*/
package com.intellij.openapi.editor.impl;
+import com.intellij.diagnostic.Dumpable;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.*;
@@ -36,12 +37,14 @@ import com.intellij.openapi.editor.impl.event.DocumentEventImpl;
import com.intellij.openapi.editor.markup.TextAttributes;
import com.intellij.openapi.util.Disposer;
import com.intellij.util.EventDispatcher;
+import com.intellij.util.Function;
+import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
-public class CaretModelImpl implements CaretModel, PrioritizedDocumentListener, Disposable {
+public class CaretModelImpl implements CaretModel, PrioritizedDocumentListener, Disposable, Dumpable {
private final EditorImpl myEditor;
private final EventDispatcher myCaretListeners = EventDispatcher.create(CaretListener.class);
@@ -512,6 +515,21 @@ public class CaretModelImpl implements CaretModel, PrioritizedDocumentListener,
myCaretListeners.getMulticaster().caretRemoved(new CaretEvent(myEditor, caret, caret.getLogicalPosition(), caret.getLogicalPosition()));
}
+ @NotNull
+ @Override
+ public String dumpState() {
+ return "[in update: " + myIsInUpdate +
+ ", document changed: " + isDocumentChanged +
+ ", perform caret merging: " + myPerformCaretMergingAfterCurrentOperation +
+ ", current caret: " + myCurrentCaret +
+ ", all carets: " + ContainerUtil.map(myCarets, new Function() {
+ @Override
+ public String fun(CaretImpl caret) {
+ return caret.dumpState();
+ }
+ }) + "]";
+ }
+
private static class VisualPositionComparator implements Comparator {
private static final VisualPositionComparator INSTANCE = new VisualPositionComparator();
diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java
index e1eceabefaf2..49353230a96c 100644
--- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java
+++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java
@@ -3149,6 +3149,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
+ "', allow caret inside tab: " + mySettings.isCaretInsideTabs()
+ ", allow caret after line end: " + mySettings.isVirtualSpace()
+ ", soft wraps: " + (mySoftWrapModel.isSoftWrappingEnabled() ? "on" : "off")
+ + ", caret model: " + getCaretModel().dumpState()
+ ", soft wraps data: " + getSoftWrapModel().dumpState()
+ "\n\nfolding data: " + getFoldingModel().dumpState()
+ (myDocument instanceof DocumentImpl ? "\n\ndocument info: " + ((DocumentImpl)myDocument).dumpState() : "")
diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorSizeManager.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorSizeManager.java
index 44d5cefa4ee8..fa1414aa0f75 100644
--- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorSizeManager.java
+++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorSizeManager.java
@@ -362,6 +362,8 @@ class EditorSizeManager implements PrioritizedDocumentListener, Disposable, Fold
@NotNull
@Override
public String dumpState() {
- return "[line widths: " + myLineWidths + "]";
+ return "[cached width: " + myWidthInPixels +
+ ", max line with extension width: " + myMaxLineWithExtensionWidth +
+ ", line widths: " + myLineWidths + "]";
}
}
diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorView.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorView.java
index fdcefe798d64..c54f04754089 100644
--- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorView.java
+++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/EditorView.java
@@ -469,6 +469,14 @@ public class EditorView implements TextDrawingCallback, Disposable, Dumpable {
@NotNull
@Override
public String dumpState() {
- return "[Size manager: " + mySizeManager.dumpState() + "]";
+ return "[prefix text: " + myPrefixText +
+ ", prefix attributes: " + myPrefixAttributes +
+ ", space width: " + myPlainSpaceWidth +
+ ", line height: " + myLineHeight +
+ ", descent: " + myDescent +
+ ", char height: " + myCharHeight +
+ ", max char width: " + myMaxCharWidth +
+ ", tab size: " + myTabSize +
+ " ,size manager: " + mySizeManager.dumpState() + "]";
}
}
diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/editor/EditorPaintingTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/editor/EditorPaintingTest.java
index 7cb58d98b896..22460eaaeb95 100644
--- a/platform/platform-tests/testSrc/com/intellij/openapi/editor/EditorPaintingTest.java
+++ b/platform/platform-tests/testSrc/com/intellij/openapi/editor/EditorPaintingTest.java
@@ -15,6 +15,7 @@
*/
package com.intellij.openapi.editor;
+import com.intellij.diagnostic.Dumpable;
import com.intellij.openapi.application.ex.PathManagerEx;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.event.DocumentEvent;
@@ -52,6 +53,7 @@ public class EditorPaintingTest extends AbstractEditorTest {
public void testWholeLineHighlighterAtDocumentEnd() throws Exception {
initText("foo");
addLineHighlighter(0, 3, HighlighterLayer.WARNING, null, Color.red);
+ System.out.println(((Dumpable)myEditor).dumpState()); // temporary code to find the cause of blinking
checkResult();
}