lazy document creation to support gui forms

This commit is contained in:
Dmitry Avdeev
2018-10-05 17:27:57 +03:00
parent d1ed92dfc3
commit fc6c9f805b
@@ -35,8 +35,10 @@ import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.openapi.wm.ex.AbstractDelegatingToRootTraversalPolicy;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileFactory;
import com.intellij.ui.components.panels.NonOpaquePanel;
import com.intellij.util.IJSwingUtilities;
import com.intellij.util.LocalTimeCounter;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.JBInsets;
import com.intellij.util.ui.JBUI;
@@ -189,7 +191,11 @@ public class EditorTextField extends NonOpaquePanel implements DocumentListener,
}
@Override
@NotNull
public Document getDocument() {
if (myDocument == null) {
myDocument = createDocument();
}
return myDocument;
}
@@ -441,17 +447,21 @@ public class EditorTextField extends NonOpaquePanel implements DocumentListener,
editor.setBackgroundColor(getBackgroundColor(isEnabled(), colorsScheme));
}
public void setOneLineMode(boolean oneLineMode) {
myOneLineMode = oneLineMode;
}
protected EditorEx createEditor() {
LOG.assertTrue(myDocument != null);
protected Document createDocument() {
final PsiFileFactory factory = PsiFileFactory.getInstance(myProject);
final long stamp = LocalTimeCounter.currentTime();
final PsiFile psiFile = factory.createFileFromText("Dummy." + myFileType.getDefaultExtension(), myFileType, "", stamp, true, false);
return PsiDocumentManager.getInstance(myProject).getDocument(psiFile);
}
protected EditorEx createEditor() {
Document document = getDocument();
final EditorFactory factory = EditorFactory.getInstance();
EditorEx editor = (EditorEx)(myIsViewer ? factory.createViewer(myDocument, myProject) : factory.createEditor(myDocument, myProject));
EditorEx editor = (EditorEx)(myIsViewer ? factory.createViewer(document, myProject) : factory.createEditor(document, myProject));
final EditorSettings settings = editor.getSettings();
settings.setAdditionalLinesCount(0);
@@ -484,7 +494,7 @@ public class EditorTextField extends NonOpaquePanel implements DocumentListener,
editor.getSettings().setCaretRowShown(false);
editor.setOneLineMode(myOneLineMode);
editor.getCaretModel().moveToOffset(myDocument.getTextLength());
editor.getCaretModel().moveToOffset(document.getTextLength());
if (!shouldHaveBorder()) {
editor.setBorder(null);
@@ -511,7 +521,7 @@ public class EditorTextField extends NonOpaquePanel implements DocumentListener,
((EditorImpl)editor).setPaintSelection(true);
editor.getColorsScheme().setColor(EditorColors.SELECTION_BACKGROUND_COLOR, myRendererBg);
editor.getColorsScheme().setColor(EditorColors.SELECTION_FOREGROUND_COLOR, myRendererFg);
editor.getSelectionModel().setSelection(0, myDocument.getTextLength());
editor.getSelectionModel().setSelection(0, document.getTextLength());
editor.setBackgroundColor(myRendererBg);
}