diff --git a/src/main/java/com/maddyhome/idea/vim/ex/ExOutputModel.kt b/src/main/java/com/maddyhome/idea/vim/ex/ExOutputModel.kt index 1a97146d45..fce49a32a3 100644 --- a/src/main/java/com/maddyhome/idea/vim/ex/ExOutputModel.kt +++ b/src/main/java/com/maddyhome/idea/vim/ex/ExOutputModel.kt @@ -70,5 +70,8 @@ class ExOutputModel private constructor(private val myEditor: Editor) : VimExOut } return model } + + @JvmStatic + fun tryGetInstance(editor: Editor) = editor.vimExOutput } } diff --git a/src/main/java/com/maddyhome/idea/vim/group/EditorGroup.java b/src/main/java/com/maddyhome/idea/vim/group/EditorGroup.java index ec10d2188d..83d0311811 100644 --- a/src/main/java/com/maddyhome/idea/vim/group/EditorGroup.java +++ b/src/main/java/com/maddyhome/idea/vim/group/EditorGroup.java @@ -417,7 +417,10 @@ public void propertyChange(PropertyChangeEvent evt) { if (activeCommandLine != null) { injector.getProcessGroup().cancelExEntry(new IjVimEditor(editor), false); } - ExOutputModel.getInstance(editor).close(); + ExOutputModel exOutputModel = ExOutputModel.tryGetInstance(editor); + if (exOutputModel != null) { + exOutputModel.close(); + } } } } diff --git a/src/main/java/com/maddyhome/idea/vim/group/MotionGroup.kt b/src/main/java/com/maddyhome/idea/vim/group/MotionGroup.kt index c396628dff..dba34afcef 100755 --- a/src/main/java/com/maddyhome/idea/vim/group/MotionGroup.kt +++ b/src/main/java/com/maddyhome/idea/vim/group/MotionGroup.kt @@ -314,7 +314,7 @@ internal class MotionGroup : VimMotionGroupBase() { } is Mode.CMD_LINE -> { injector.processGroup.cancelExEntry(vimEditor, false) - ExOutputModel.getInstance(editor).close() + ExOutputModel.tryGetInstance(editor)?.close() } else -> {} } diff --git a/src/main/java/com/maddyhome/idea/vim/listener/VimListenerManager.kt b/src/main/java/com/maddyhome/idea/vim/listener/VimListenerManager.kt index b9d917bd2b..a10ba22c70 100644 --- a/src/main/java/com/maddyhome/idea/vim/listener/VimListenerManager.kt +++ b/src/main/java/com/maddyhome/idea/vim/listener/VimListenerManager.kt @@ -741,7 +741,7 @@ internal object VimListenerManager { injector.processGroup.cancelExEntry(editor.vim, false) } - ExOutputModel.getInstance(editor).close() + ExOutputModel.tryGetInstance(editor)?.close() val caretModel = editor.caretModel if (editor.vim.mode.selectionType != null) { diff --git a/src/main/java/com/maddyhome/idea/vim/ui/ExOutputPanel.java b/src/main/java/com/maddyhome/idea/vim/ui/ExOutputPanel.java index 6697a72eaf..21c1936ac7 100644 --- a/src/main/java/com/maddyhome/idea/vim/ui/ExOutputPanel.java +++ b/src/main/java/com/maddyhome/idea/vim/ui/ExOutputPanel.java @@ -267,6 +267,12 @@ private void scrollOffset(int more) { private void positionPanel() { final JComponent contentComponent = myEditor.getContentComponent(); Container scroll = SwingUtilities.getAncestorOfClass(JScrollPane.class, contentComponent); + JRootPane rootPane = SwingUtilities.getRootPane(contentComponent); + if (scroll == null || rootPane == null) { + // These might be null if we're invoked during component initialisation and before it's been added to the tree + return; + } + setSize(scroll.getSize()); myLineHeight = myText.getFontMetrics(myText.getFont()).getHeight(); @@ -280,8 +286,7 @@ private void positionPanel() { Rectangle bounds = scroll.getBounds(); bounds.translate(0, scroll.getHeight() - height); bounds.height = height; - Point pos = SwingUtilities.convertPoint(scroll.getParent(), bounds.getLocation(), - SwingUtilities.getRootPane(contentComponent).getGlassPane()); + Point pos = SwingUtilities.convertPoint(scroll.getParent(), bounds.getLocation(), rootPane.getGlassPane()); bounds.setLocation(pos); setBounds(bounds);