From 701fc823e5700895e72e21dbf9be0eeb65558f44 Mon Sep 17 00:00:00 2001 From: Rustam Vishnyakov Date: Mon, 23 Dec 2019 12:32:44 +0300 Subject: [PATCH] Refactoring GitOrigin-RevId: 972c43b3dc74a6287cec0eb3d43b4a4ec663e74f --- .../ide/lightEdit/LightEditFrameWrapper.java | 90 +++++++++---------- .../ide/lightEdit/LightEditPanel.java | 9 +- .../ide/lightEdit/LightEditService.java | 39 ++++---- 3 files changed, 62 insertions(+), 76 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/lightEdit/LightEditFrameWrapper.java b/platform/platform-impl/src/com/intellij/ide/lightEdit/LightEditFrameWrapper.java index 5bac1a6cea72..9c41ff822289 100644 --- a/platform/platform-impl/src/com/intellij/ide/lightEdit/LightEditFrameWrapper.java +++ b/platform/platform-impl/src/com/intellij/ide/lightEdit/LightEditFrameWrapper.java @@ -22,71 +22,56 @@ import java.awt.*; import java.util.Objects; import java.util.function.BooleanSupplier; -class LightEditFrameWrapper implements Disposable { +class LightEditFrameWrapper extends ProjectFrameHelper implements Disposable { - private final LightEditPanel myLightEditPanel; - private final ProjectFrameHelper myProjectFrameHelper; - private BooleanSupplier myCloseHandler; + private final BooleanSupplier myCloseHandler; - LightEditFrameWrapper(@NotNull LightEditPanel lightEditPanel) { - myLightEditPanel = lightEditPanel; - myProjectFrameHelper = allocateFrame(); - Disposer.register(this, myProjectFrameHelper); - myProjectFrameHelper.getFrame().setJMenuBar(new LightEditMenuBar()); + private LightEditPanel myEditPanel; + + LightEditFrameWrapper(@NotNull IdeFrameImpl frame, @NotNull BooleanSupplier closeHandler) { + super(frame, null); + getFrame().setJMenuBar(new LightEditMenuBar()); + myCloseHandler = closeHandler; } @NotNull LightEditPanel getLightEditPanel() { - return myLightEditPanel; + return myEditPanel; } @NotNull - private ProjectFrameHelper allocateFrame() { - return ((WindowManagerImpl)WindowManager.getInstance()).allocateFrame(LightEditUtil.getProject(), () -> { - return new ProjectFrameHelper(ProjectFrameAllocatorKt.createNewProjectFrame(), null) { - @NotNull - @Override - protected IdeRootPane createIdeRootPane() { - return new LightEditRootPane(getFrame(), this, this); - } - - @Override - protected void installDefaultProjectStatusBarWidgets(@NotNull Project project) { - IdeStatusBarImpl statusBar = Objects.requireNonNull(getStatusBar()); - addWidget(project, statusBar, new LightEditPositionWidget(myLightEditPanel.getEditorManager()), - StatusBar.Anchors.before(IdeMessagePanel.FATAL_ERROR)); - addWidget(project, statusBar, new LightEditAutosaveWidget(myLightEditPanel.getEditorManager()), - StatusBar.Anchors.before(IdeMessagePanel.FATAL_ERROR)); - statusBar.updateWidgets(); - } - - @NotNull - @Override - protected CloseProjectWindowHelper createCloseProjectWindowHelper() { - return new CloseProjectWindowHelper() { - @Override - public void windowClosing(@Nullable Project project) { - if (myCloseHandler.getAsBoolean()) { - super.windowClosing(project); - } - } - }; - } - }; - }); + @Override + protected IdeRootPane createIdeRootPane() { + return new LightEditRootPane(getFrame(), this, this); } - public void setTitle(@NotNull String title) { - IdeFrameImpl frame = myProjectFrameHelper.getFrame(); - frame.setTitle(title); + @Override + protected void installDefaultProjectStatusBarWidgets(@NotNull Project project) { + LightEditorManager editorManager = LightEditService.getInstance().getEditorManager(); + IdeStatusBarImpl statusBar = Objects.requireNonNull(getStatusBar()); + addWidget(this, statusBar, new LightEditPositionWidget(editorManager), + StatusBar.Anchors.before(IdeMessagePanel.FATAL_ERROR)); + addWidget(this, statusBar, new LightEditAutosaveWidget(editorManager), + StatusBar.Anchors.before(IdeMessagePanel.FATAL_ERROR)); + statusBar.updateWidgets(); } - public void setOnCloseHandler(@NotNull BooleanSupplier closeHandler) { - myCloseHandler = closeHandler; + @NotNull + @Override + protected CloseProjectWindowHelper createCloseProjectWindowHelper() { + return new CloseProjectWindowHelper() { + @Override + public void windowClosing(@Nullable Project project) { + if (myCloseHandler.getAsBoolean()) { + super.windowClosing(project); + } + } + }; } @Override public void dispose() { + Disposer.dispose(myEditPanel); } private class LightEditRootPane extends IdeRootPane { @@ -97,7 +82,8 @@ class LightEditFrameWrapper implements Disposable { @NotNull @Override protected Component getCenterComponent(@NotNull JFrame frame, @NotNull Disposable parentDisposable) { - return myLightEditPanel; + myEditPanel = new LightEditPanel(); + return myEditPanel; } @NotNull @@ -124,4 +110,10 @@ class LightEditFrameWrapper implements Disposable { protected void deinstallNorthComponents() { } } + + static LightEditFrameWrapper allocate(@NotNull BooleanSupplier closeHandler) { + return (LightEditFrameWrapper)((WindowManagerImpl)WindowManager.getInstance()).allocateFrame( + LightEditUtil.getProject(), + () -> new LightEditFrameWrapper(ProjectFrameAllocatorKt.createNewProjectFrame(), closeHandler)); + } } diff --git a/platform/platform-impl/src/com/intellij/ide/lightEdit/LightEditPanel.java b/platform/platform-impl/src/com/intellij/ide/lightEdit/LightEditPanel.java index 180ab4e1a7c4..93e09ead3b66 100644 --- a/platform/platform-impl/src/com/intellij/ide/lightEdit/LightEditPanel.java +++ b/platform/platform-impl/src/com/intellij/ide/lightEdit/LightEditPanel.java @@ -15,19 +15,14 @@ public class LightEditPanel extends JPanel implements Disposable { private final LightEditorManager myEditorManager; private final LightEditTabs myTabs; - public LightEditPanel(LightEditorManager editorManager) { - myEditorManager = editorManager; + public LightEditPanel() { + myEditorManager = LightEditService.getInstance().getEditorManager(); setLayout(new BorderLayout()); myTabs = new LightEditTabs(this, myEditorManager); add(myTabs, BorderLayout.CENTER); Disposer.register(this, myTabs); } - @NotNull - LightEditorManager getEditorManager() { - return myEditorManager; - } - public LightEditTabs getTabs() { return myTabs; } diff --git a/platform/platform-impl/src/com/intellij/ide/lightEdit/LightEditService.java b/platform/platform-impl/src/com/intellij/ide/lightEdit/LightEditService.java index b3421478e674..2b112eb00d4c 100644 --- a/platform/platform-impl/src/com/intellij/ide/lightEdit/LightEditService.java +++ b/platform/platform-impl/src/com/intellij/ide/lightEdit/LightEditService.java @@ -29,7 +29,6 @@ public class LightEditService implements Disposable, LightEditorListener, Persis private static final Logger LOG = Logger.getInstance(LightEditService.class); private LightEditFrameWrapper myFrameWrapper; - private boolean myWrapperIsStale; private final LightEditorManager myEditorManager; private final LightEditConfiguration myConfiguration = new LightEditConfiguration(); @@ -55,19 +54,20 @@ public class LightEditService implements Disposable, LightEditorListener, Persis } private void init() { - if (myFrameWrapper == null || myWrapperIsStale) { - final LightEditPanel editorPanel = new LightEditPanel(myEditorManager); - myFrameWrapper = new LightEditFrameWrapper(editorPanel); - myFrameWrapper.setOnCloseHandler(()-> closeEditorWindow()); - myWrapperIsStale = false; + if (myFrameWrapper == null) { + myFrameWrapper = LightEditFrameWrapper.allocate(()->closeEditorWindow()); LOG.info("Frame created"); } + else { + myFrameWrapper.getFrame().setVisible(true); + LOG.info("Window opened"); + } } public void showEditorWindow() { if (!ApplicationManager.getApplication().isUnitTestMode()) { init(); - myFrameWrapper.setTitle(getAppName()); + myFrameWrapper.getFrame().setTitle(getAppName()); } } @@ -127,11 +127,10 @@ public class LightEditService implements Disposable, LightEditorListener, Persis public boolean closeEditorWindow() { if (canClose()) { - disposeEditorPanel(); - myWrapperIsStale = true; - Disposer.dispose(myEditorManager); + myFrameWrapper.getFrame().setVisible(false); LOG.info("Window closed"); if (ProjectManager.getInstance().getOpenProjects().length == 0 && WelcomeFrame.getInstance() == null) { + disposeFrameWrapper(); LOG.info("No open projects or welcome frame, exiting"); try { ApplicationManager.getApplication().exit(); @@ -167,27 +166,27 @@ public class LightEditService implements Disposable, LightEditorListener, Persis } public LightEditPanel getEditPanel() { + assert !Disposer.isDisposed(myFrameWrapper.getLightEditPanel()); return myFrameWrapper.getLightEditPanel(); } - private void disposeEditorPanel() { - LightEditPanel editorPanel = getEditPanel(); - Disposer.dispose(editorPanel); - } - @Override public void dispose() { if (myFrameWrapper != null) { - disposeEditorPanel(); - Disposer.dispose(myFrameWrapper); - LOG.info("Frame disposed"); + disposeFrameWrapper(); } } + private void disposeFrameWrapper() { + Disposer.dispose(myFrameWrapper); + myFrameWrapper = null; + LOG.info("Frame disposed"); + } + @Override public void afterSelect(@Nullable LightEditorInfo editorInfo) { - if (myFrameWrapper != null && !myWrapperIsStale) { - myFrameWrapper.setTitle(getAppName() + (editorInfo != null ? ": " + editorInfo.getFile().getPresentableUrl() : "")); + if (myFrameWrapper != null) { + myFrameWrapper.getFrame().setTitle(getAppName() + (editorInfo != null ? ": " + editorInfo.getFile().getPresentableUrl() : "")); } }