diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/editor/EditorAgentImpl.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/editor/EditorAgentImpl.java index 961bc2b6883..20bd1e7a42a 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/editor/EditorAgentImpl.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/editor/EditorAgentImpl.java @@ -17,7 +17,6 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.inject.Inject; -import com.google.inject.Provider; import com.google.inject.Singleton; import com.google.web.bindery.event.shared.EventBus; @@ -58,7 +57,6 @@ import org.eclipse.che.ide.api.parts.EditorPartStack; import org.eclipse.che.ide.api.parts.EditorTab; import org.eclipse.che.ide.api.parts.PartPresenter; -import org.eclipse.che.ide.api.parts.PropertyListener; import org.eclipse.che.ide.api.parts.WorkspaceAgent; import org.eclipse.che.ide.api.preferences.PreferencesManager; import org.eclipse.che.ide.api.resources.Resource; @@ -106,7 +104,7 @@ public class EditorAgentImpl implements EditorAgent, private final List openedEditors; private final Map openedEditorsToProviders; - private final Provider editorContentSynchronizerProvider; + private final EditorContentSynchronizer editorContentSynchronizer; private final PromiseProvider promiseProvider; private final ResourceProvider resourceProvider; private List dirtyEditors; @@ -121,7 +119,7 @@ public EditorAgentImpl(EventBus eventBus, WorkspaceAgent workspaceAgent, CoreLocalizationConstant coreLocalizationConstant, EditorMultiPartStackPresenter editorMultiPartStack, - Provider editorContentSynchronizerProvider, + EditorContentSynchronizer editorContentSynchronizer, PromiseProvider promiseProvider, ResourceProvider resourceProvider) { this.eventBus = eventBus; @@ -131,7 +129,7 @@ public EditorAgentImpl(EventBus eventBus, this.workspaceAgent = workspaceAgent; this.coreLocalizationConstant = coreLocalizationConstant; this.editorMultiPartStack = editorMultiPartStack; - this.editorContentSynchronizerProvider = editorContentSynchronizerProvider; + this.editorContentSynchronizer = editorContentSynchronizer; this.promiseProvider = promiseProvider; this.resourceProvider = resourceProvider; this.openedEditors = newArrayList(); @@ -236,7 +234,7 @@ private void doCloseEditor(EditorTab tab) { editor.close(false); if (editor instanceof TextEditor) { - editorContentSynchronizerProvider.get().unTrackEditor(editor); + editorContentSynchronizer.unTrackEditor(editor); } if (activeEditor != null && activeEditor == editor) { @@ -291,28 +289,31 @@ private void initEditor(final VirtualFile file, final OpenEditorCallback callbac finalizeInit(file, callback, editor, editorProvider); } - private void finalizeInit(final VirtualFile file, final OpenEditorCallback callback, final EditorPartPresenter editor, - EditorProvider editorProvider) { - openedEditors.add(editor); - openedEditorsToProviders.put(editor, editorProvider.getId()); + private Promise finalizeInit(final VirtualFile file, + final OpenEditorCallback openEditorCallback, + final EditorPartPresenter editor, + EditorProvider editorProvider) { + return AsyncPromiseHelper.createFromAsyncRequest(promiseCallback -> { + openedEditors.add(editor); + openedEditorsToProviders.put(editor, editorProvider.getId()); - workspaceAgent.setActivePart(editor); - editor.addPropertyListener(new PropertyListener() { - @Override - public void propertyChanged(PartPresenter source, int propId) { + workspaceAgent.setActivePart(editor); + editor.addPropertyListener((source, propId) -> { if (propId == EditorPartPresenter.PROP_INPUT) { + promiseCallback.onSuccess(null); + if (editor instanceof HasReadOnlyProperty) { ((HasReadOnlyProperty)editor).setReadOnly(file.isReadOnly()); } if (editor instanceof TextEditor) { - editorContentSynchronizerProvider.get().trackEditor(editor); + editorContentSynchronizer.trackEditor(editor); } - callback.onEditorOpened(editor); + openEditorCallback.onEditorOpened(editor); eventBus.fireEvent(FileEvent.createFileOpenedEvent(file)); eventBus.fireEvent(new EditorOpenedEvent(file, editor)); } - } + }); }); } @@ -557,34 +558,35 @@ private void restoreCreateEditor(final VirtualFile resourceFile, JsonObject file final EditorProvider provider = editorRegistry.findEditorProviderById(providerId); if (provider instanceof AsyncEditorProvider) { - ((AsyncEditorProvider)provider).createEditor(resourceFile).then(new Operation() { - @Override - public void apply(EditorPartPresenter arg) throws OperationException { - restoreInitEditor(resourceFile, callback, fileTypeRegistry.getFileTypeByFile(resourceFile), arg, provider, - editorPartStack); + ((AsyncEditorProvider)provider).createEditor(resourceFile).then(editor -> { + restoreInitEditor(resourceFile, callback, fileTypeRegistry.getFileTypeByFile(resourceFile), editor, provider, + editorPartStack).then(arg -> { if (active) { - activeEditors.put(arg, editorPartStack); + activeEditors.put(editor, editorPartStack); } - - } + openCallback.onSuccess(null); + }); }); } else { EditorPartPresenter editor = provider.getEditor(); - restoreInitEditor(resourceFile, callback, fileTypeRegistry.getFileTypeByFile(resourceFile), editor, provider, editorPartStack); - if (active) { - activeEditors.put(editor, editorPartStack); - } + restoreInitEditor(resourceFile, callback, fileTypeRegistry.getFileTypeByFile(resourceFile), editor, provider, editorPartStack) + .then(arg -> { + if (active) { + activeEditors.put(editor, editorPartStack); + } + openCallback.onSuccess(null); + }); } - openCallback.onSuccess(null); } - private void restoreInitEditor(final VirtualFile file, final OpenEditorCallback callback, FileType fileType, - final EditorPartPresenter editor, EditorProvider editorProvider, EditorPartStack editorPartStack) { + private Promise restoreInitEditor(final VirtualFile file, final OpenEditorCallback callback, FileType fileType, + final EditorPartPresenter editor, EditorProvider editorProvider, + EditorPartStack editorPartStack) { editor.init(new EditorInputImpl(fileType, file), callback); editor.addCloseHandler(this); editorPartStack.addPart(editor); - finalizeInit(file, callback, editor, editorProvider); + return finalizeInit(file, callback, editor, editorProvider); } @Override