Skip to content

Commit

Permalink
CHE-682: Enable debug buttons when debugger open file without source
Browse files Browse the repository at this point in the history
Signed-off-by: Aleksandr Andrienko <aandrienko@codenvy.com>
  • Loading branch information
AndrienkoAleksandr committed Mar 8, 2016
1 parent 09cee9f commit 66dacf8
Show file tree
Hide file tree
Showing 15 changed files with 91 additions and 74 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.google.gwt.user.client.ui.IsWidget;

import org.eclipse.che.ide.api.parts.AbstractPartPresenter;
import org.eclipse.che.ide.api.editor.EditorAgent.OpenEditorCallback;

import javax.validation.constraints.NotNull;
import java.util.ArrayList;
Expand All @@ -32,13 +33,13 @@ public abstract class AbstractEditorPresenter extends AbstractPartPresenter impl

/** {@inheritDoc} */
@Override
public void init(@NotNull EditorInput input) throws EditorInitException {
public void init(@NotNull EditorInput input, final OpenEditorCallback callback) {
this.input = input;
initializeEditor();
initializeEditor(callback);
}

/** Initializes this editor. */
protected abstract void initializeEditor();
protected abstract void initializeEditor(final OpenEditorCallback callback);

/**
* Set dirty state and notify expressions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,5 +123,7 @@ interface OpenEditorCallback {
void onEditorOpened(EditorPartPresenter editor);

void onEditorActivated(EditorPartPresenter editor);

void onFailedInitialization();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@
*******************************************************************************/
package org.eclipse.che.ide.api.editor;

import org.eclipse.che.ide.api.parts.PartPresenter;
import com.google.gwt.user.client.rpc.AsyncCallback;

import org.eclipse.che.ide.api.editor.EditorAgent.OpenEditorCallback;
import org.eclipse.che.ide.api.parts.PartPresenter;

import javax.validation.constraints.NotNull;

/**
Expand Down Expand Up @@ -54,7 +56,7 @@ interface EditorPartCloseHandler {
* @throws EditorInitException
* if this editor was not initialized successfully
*/
void init(@NotNull EditorInput input) throws EditorInitException;
void init(@NotNull EditorInput input, OpenEditorCallback callback);

/**
* Returns the input for this editor. If this value changes the part must
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import org.eclipse.che.ide.CoreLocalizationConstant;
import org.eclipse.che.ide.api.app.AppContext;
import org.eclipse.che.ide.api.editor.EditorAgent;
import org.eclipse.che.ide.api.editor.EditorInitException;
import org.eclipse.che.ide.api.editor.EditorInput;
import org.eclipse.che.ide.api.editor.EditorOpenedEvent;
import org.eclipse.che.ide.api.editor.EditorPartPresenter;
Expand Down Expand Up @@ -60,7 +59,6 @@
import org.eclipse.che.ide.rest.AsyncRequestCallback;
import org.eclipse.che.ide.rest.DtoUnmarshallerFactory;
import org.eclipse.che.ide.rest.Unmarshallable;
import org.eclipse.che.ide.util.loging.Log;

import javax.validation.constraints.NotNull;
import java.util.ArrayList;
Expand Down Expand Up @@ -317,12 +315,10 @@ private void doOpen(final VirtualFile file, final OpenEditorCallback callback) {
FileType fileType = fileTypeRegistry.getFileTypeByFile(file);
EditorProvider editorProvider = editorRegistry.getEditor(fileType);
final EditorPartPresenter editor = editorProvider.getEditor();
try {
editor.init(new EditorInputImpl(fileType, file));
editor.addCloseHandler(editorClosed);
} catch (EditorInitException e) {
Log.error(getClass(), e);
}

editor.init(new EditorInputImpl(fileType, file), callback);
editor.addCloseHandler(editorClosed);

workspace.openPart(editor, EDITING);
openedEditors.put(filePath, editor);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

import org.eclipse.che.ide.CoreLocalizationConstant;
import org.eclipse.che.ide.api.editor.AbstractEditorPresenter;
import org.eclipse.che.ide.api.editor.EditorAgent.OpenEditorCallback;
import org.eclipse.che.ide.api.editor.EditorInput;
import org.eclipse.che.ide.api.event.FileEvent;
import org.eclipse.che.ide.api.event.FileEventHandler;
Expand Down Expand Up @@ -164,7 +165,7 @@ private Image getImage() {

/** {@inheritDoc} */
@Override
protected void initializeEditor() {
protected void initializeEditor(OpenEditorCallback callback) {
}

/** {@inheritDoc} */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import com.google.gwt.user.client.ui.Widget;
import com.google.web.bindery.event.shared.EventBus;

import org.eclipse.che.ide.api.editor.EditorInitException;
import org.eclipse.che.ide.api.editor.EditorInput;
import org.eclipse.che.ide.api.event.FileEvent;
import org.eclipse.che.ide.api.event.FileEventHandler;
Expand All @@ -48,6 +47,8 @@
import java.util.ArrayList;
import java.util.List;

import static org.eclipse.che.ide.api.editor.EditorAgent.OpenEditorCallback;

/**
* Default implementation of {@link EditorAdapter}.
*/
Expand Down Expand Up @@ -145,8 +146,8 @@ public void setFocus() {
}

@Override
public void init(final EditorInput input) throws EditorInitException {
this.textEditor.init(input);
public void init(final EditorInput input, OpenEditorCallback callback) {
this.textEditor.init(input, callback);
this.input = input;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import com.google.web.bindery.event.shared.EventBus;

import org.eclipse.che.ide.api.editor.AbstractEditorPresenter;
import org.eclipse.che.ide.api.editor.EditorAgent.OpenEditorCallback;
import org.eclipse.che.ide.api.editor.EditorInput;
import org.eclipse.che.ide.api.editor.EditorWithAutoSave;
import org.eclipse.che.ide.api.editor.EditorWithErrors;
Expand Down Expand Up @@ -176,7 +177,7 @@ public EmbeddedTextEditorPresenter(final CodeAssistantFactory codeAssistantFacto
}

@Override
protected void initializeEditor() {
protected void initializeEditor(final OpenEditorCallback callback) {
new TextEditorInit<T>(configuration,
generalEventBus,
this.codeAssistantFactory,
Expand All @@ -197,11 +198,17 @@ public void onReady(final String content) {
@Override
public void onError() {
displayErrorPanel(constant.editorInitErrorMessage());
if (callback != null) {
callback.onFailedInitialization();
}
}

@Override
public void onFileError() {
displayErrorPanel(constant.editorFileErrorMessage());
if (callback != null) {
callback.onFailedInitialization();
}
}
};
documentStorage.getDocument(input.getFile(), dualCallback);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,15 @@
*******************************************************************************/
package org.eclipse.che.ide.jseditor.client.editoradapter;

import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.RequiresResize;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwtmockito.GwtMockitoTestRunner;
import com.google.web.bindery.event.shared.EventBus;

import org.eclipse.che.ide.api.editor.EditorInitException;
import org.eclipse.che.ide.api.editor.EditorInput;
import org.eclipse.che.ide.api.editor.EditorPartPresenter;
Expand All @@ -28,15 +37,6 @@
import org.eclipse.che.ide.jseditor.client.text.TextPosition;
import org.eclipse.che.ide.jseditor.client.text.TextRange;
import org.eclipse.che.ide.jseditor.client.texteditor.ConfigurableTextEditor;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.RequiresResize;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwtmockito.GwtMockitoTestRunner;
import com.google.web.bindery.event.shared.EventBus;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
Expand All @@ -47,6 +47,7 @@
import org.vectomatic.dom.svg.ui.SVGImage;
import org.vectomatic.dom.svg.ui.SVGResource;

import static org.eclipse.che.ide.api.editor.EditorAgent.OpenEditorCallback;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
Expand Down Expand Up @@ -173,10 +174,11 @@ public void shouldShowMessage() {
@Test
public void shouldInit() throws EditorInitException {
final EditorInput input = mock(EditorInput.class);
final OpenEditorCallback editorCallback = mock(OpenEditorCallback.class);

defaultEditorAdapter.init(input);
defaultEditorAdapter.init(input, editorCallback);

verify(textEditor).init(input);
verify(textEditor).init(input, editorCallback);
}

@Test
Expand Down Expand Up @@ -432,14 +434,15 @@ public void shouldCloseEventFiredUp() throws EditorInitException {
final FileEvent event = mock(FileEvent.class);
final VirtualFile file = mock(VirtualFile.class);
final EditorInput input = mock(EditorInput.class);
final OpenEditorCallback editorCallback = mock(OpenEditorCallback.class);
String path = "filePath";

when(input.getFile()).thenReturn(file);
when(event.getFile()).thenReturn(file);
when(file.getPath()).thenReturn(path);
when(event.getOperationType()).thenReturn(FileEvent.FileOperation.CLOSE);

defaultEditorAdapter.init(input);
defaultEditorAdapter.init(input, editorCallback);
defaultEditorAdapter.onFileOperation(event);

verify(workspaceAgent).removePart(defaultEditorAdapter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ public void initializeAndInitEditor() throws EditorInitException {

embeddedTextEditorPresenter.injectAsyncLoader(loaderFactory);
embeddedTextEditorPresenter.initialize(configuration, notificationManager);
embeddedTextEditorPresenter.init(editorInput);
embeddedTextEditorPresenter.init(editorInput, null);

verify(documentStorage).getDocument(any(VirtualFile.class), callBackCaptor.capture());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.web.bindery.event.shared.EventBus;
import com.google.web.bindery.event.shared.HandlerRegistration;

import org.eclipse.che.api.machine.gwt.client.events.WsAgentStateEvent;
import org.eclipse.che.api.machine.gwt.client.events.WsAgentStateHandler;
Expand All @@ -30,8 +29,6 @@
import org.eclipse.che.ide.api.app.CurrentProject;
import org.eclipse.che.ide.api.editor.EditorAgent;
import org.eclipse.che.ide.api.editor.EditorPartPresenter;
import org.eclipse.che.ide.api.event.ActivePartChangedEvent;
import org.eclipse.che.ide.api.event.ActivePartChangedHandler;
import org.eclipse.che.ide.api.event.FileEvent;
import org.eclipse.che.ide.api.notification.NotificationManager;
import org.eclipse.che.ide.api.notification.StatusNotification;
Expand All @@ -45,7 +42,6 @@
import org.eclipse.che.ide.debug.BreakpointManager;
import org.eclipse.che.ide.debug.BreakpointStateEvent;
import org.eclipse.che.ide.debug.Debugger;
import org.eclipse.che.ide.debug.DebuggerManager;
import org.eclipse.che.ide.debug.DebuggerState;
import org.eclipse.che.ide.dto.DtoFactory;
import org.eclipse.che.ide.ext.java.client.project.node.JavaNodeManager;
Expand Down Expand Up @@ -109,6 +105,7 @@
import static org.eclipse.che.ide.ext.java.jdi.shared.DebuggerEvent.BREAKPOINT;
import static org.eclipse.che.ide.ext.java.jdi.shared.DebuggerEvent.BREAKPOINT_ACTIVATED;
import static org.eclipse.che.ide.ext.java.jdi.shared.DebuggerEvent.STEP;
import static org.eclipse.che.ide.api.editor.EditorAgent.OpenEditorCallback;

/**
* The presenter provides debug java application.
Expand Down Expand Up @@ -621,6 +618,7 @@ public void onSuccess(VirtualFile result) {

@Override
public void onFailure(Throwable caught) {
breakpointManager.setCurrentBreakpoint(finalLocation.getLineNumber() - 1);
notificationManager.notify(caught.getMessage(), StatusNotification.Status.FAIL, false);
}
});
Expand Down Expand Up @@ -697,32 +695,13 @@ private void openFile(@NotNull final Location location,
}

projectExplorer.getNodeByPath(new HasStorablePath.StorablePath(filePath)).then(new Operation<Node>() {
public HandlerRegistration handlerRegistration;

@Override
public void apply(final Node node) throws OperationException {
if (!(node instanceof FileReferenceNode)) {
return;
}

handlerRegistration = eventBus.addHandler(ActivePartChangedEvent.TYPE, new ActivePartChangedHandler() {
@Override
public void onActivePartChanged(ActivePartChangedEvent event) {
if (event.getActivePart() instanceof EditorPartPresenter) {
final VirtualFile openedFile = ((EditorPartPresenter)event.getActivePart()).getEditorInput().getFile();
if (((FileReferenceNode)node).getStorablePath().equals(openedFile.getPath())) {
handlerRegistration.removeHandler();
// give the editor some time to fully render it's view
new Timer() {
@Override
public void run() {
callback.onSuccess((VirtualFile)node);
}
}.schedule(300);
}
}
}
});
handleActivateFile((VirtualFile)node, callback);
eventBus.fireEvent(new FileEvent((VirtualFile)node, OPEN));
}
}).catchError(new Operation<PromiseError>() {
Expand All @@ -749,14 +728,18 @@ private void openExternalResource(Location location, final AsyncCallback<Virtual
javaNodeManager.getJavaSettingsProvider()
.getSettings());

editorAgent.openEditor(jarFileNode, new EditorAgent.OpenEditorCallback() {
handleActivateFile(jarFileNode, callback);
eventBus.fireEvent(new FileEvent(jarFileNode, OPEN));
}

public void handleActivateFile(final VirtualFile virtualFile, final AsyncCallback<VirtualFile> callback) {
editorAgent.openEditor(virtualFile, new OpenEditorCallback() {
@Override
public void onEditorOpened(EditorPartPresenter editor) {
// give the editor some time to fully render it's view
new Timer() {
@Override
public void run() {
callback.onSuccess(jarFileNode);
callback.onSuccess(virtualFile);
}
}.schedule(300);
}
Expand All @@ -766,10 +749,15 @@ public void onEditorActivated(EditorPartPresenter editor) {
new Timer() {
@Override
public void run() {
callback.onSuccess(jarFileNode);
callback.onSuccess(virtualFile);
}
}.schedule(300);
}

@Override
public void onFailedInitialization() {
callback.onFailure(null);
}
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.eclipse.che.api.promises.client.OperationException;
import org.eclipse.che.ide.api.app.AppContext;
import org.eclipse.che.ide.api.editor.EditorAgent;
import org.eclipse.che.ide.api.editor.EditorAgent.OpenEditorCallback;
import org.eclipse.che.ide.api.editor.EditorPartPresenter;
import org.eclipse.che.ide.api.project.node.HasStorablePath;
import org.eclipse.che.ide.api.project.node.Node;
Expand Down Expand Up @@ -160,14 +161,19 @@ private void openFile(VirtualFile result, final OpenDeclarationDescriptor descri
editorAgent.activateEditor(editorPartPresenter);
fileOpened(editorPartPresenter, descriptor.getOffset());
} else {
editorAgent.openEditor(result, new EditorAgent.OpenEditorCallback() {
editorAgent.openEditor(result, new OpenEditorCallback() {
@Override
public void onEditorOpened(EditorPartPresenter editor) {
fileOpened(editor, descriptor.getOffset());
}

@Override
public void onEditorActivated(EditorPartPresenter editor) { }
public void onEditorActivated(EditorPartPresenter editor) {
}

@Override
public void onFailedInitialization() {
}
});
}
}
Expand Down
Loading

0 comments on commit 66dacf8

Please sign in to comment.