Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(217)

Unified Diff: plugins/org.chromium.debug.ui/src/org/chromium/debug/ui/liveedit/LiveEditResultDialog.java

Issue 12040008: Disaply compile error position in editor (Closed) Base URL: https://chromedevtools.googlecode.com/svn/trunk
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: plugins/org.chromium.debug.ui/src/org/chromium/debug/ui/liveedit/LiveEditResultDialog.java
diff --git a/plugins/org.chromium.debug.ui/src/org/chromium/debug/ui/liveedit/LiveEditResultDialog.java b/plugins/org.chromium.debug.ui/src/org/chromium/debug/ui/liveedit/LiveEditResultDialog.java
index befda61fbe65944c171571a355ed26c79bb4151e..5a2054233c3ee10008d51a180ed8249566120670 100644
--- a/plugins/org.chromium.debug.ui/src/org/chromium/debug/ui/liveedit/LiveEditResultDialog.java
+++ b/plugins/org.chromium.debug.ui/src/org/chromium/debug/ui/liveedit/LiveEditResultDialog.java
@@ -16,6 +16,9 @@ import org.chromium.debug.ui.TableUtils.ColumnData;
import org.chromium.debug.ui.TableUtils.TrivialAdapter;
import org.chromium.debug.ui.TableUtils.ValueAdapter;
import org.chromium.debug.ui.actions.ChooseVmControl;
+import org.chromium.sdk.TextStreamPosition;
+import org.chromium.sdk.UpdatableScript;
+import org.chromium.sdk.UpdatableScript.CompileErrorFailure;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.IStructuredContentProvider;
@@ -23,8 +26,12 @@ import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
@@ -61,7 +68,7 @@ public class LiveEditResultDialog extends Dialog {
public interface SingleInputVisitor<RES> {
RES visitSuccess(SuccessResult successResult);
- RES visitErrorMessage(String text);
+ RES visitErrorMessage(String message, UpdatableScript.Failure failure);
}
public interface MultipleResult {
@@ -79,14 +86,26 @@ public class LiveEditResultDialog extends Dialog {
String getOldScriptName();
}
+ /**
+ * Allows dialog to highlight error in source text (presumably, in text editor).
+ */
+ public interface ErrorPositionHighlighter {
+ void highlight(int offset, int length);
+ }
+
public static SingleInput createTextInput(final String text,
final PushChangesPlan changesPlan) {
+ return createTextInput(text, changesPlan, UpdatableScript.Failure.UNSPECIFIED);
+ }
+
+ public static SingleInput createTextInput(final String text,
+ final PushChangesPlan changesPlan, final UpdatableScript.Failure failure) {
return new LiveEditResultDialog.SingleInput() {
public <RES> RES accept(LiveEditResultDialog.InputVisitor<RES> visitor) {
return acceptSingle(visitor);
}
public <RES> RES acceptSingle(LiveEditResultDialog.SingleInputVisitor<RES> visitor) {
- return visitor.visitErrorMessage(text);
+ return visitor.visitErrorMessage(text, failure);
}
public ScriptTargetMapping getFilePair() {
return changesPlan.getScriptTargetMapping();
@@ -95,16 +114,19 @@ public class LiveEditResultDialog extends Dialog {
}
private final Input input;
+ private final ErrorPositionHighlighter positionHighlighter;
- public LiveEditResultDialog(Shell shell, Input input) {
+ public LiveEditResultDialog(Shell shell, Input input,
+ ErrorPositionHighlighter positionHighlighter) {
super(shell);
this.input = input;
+ this.positionHighlighter = positionHighlighter;
}
@Override
protected boolean isResizable() {
return true;
-}
+ }
@Override
protected void configureShell(Shell shell) {
@@ -123,9 +145,19 @@ public class LiveEditResultDialog extends Dialog {
final Composite composite = (Composite) super.createDialogArea(parent);
input.accept(new InputVisitor<Void>() {
- public Void visitErrorMessage(String text) {
- createErrorMessageControls(composite, text);
- return null;
+ public Void visitErrorMessage(final String text, UpdatableScript.Failure failure) {
+ return failure.accept(new UpdatableScript.Failure.Visitor<Void>() {
+ @Override public Void visitUnspecified() {
+ createErrorMessageControls(composite, text);
+ return null;
+ }
+ @Override public Void visitCompileError(CompileErrorFailure compileError) {
+ createErrorWithPositionControls(composite, Messages.LiveEditResultDialog_COMPILE_ERROR,
+ compileError.getCompilerMessage(),
+ compileError.getStartPosition(), compileError.getEndPosition());
+ return null;
+ }
+ });
}
public Void visitSuccess(SuccessResult successResult) {
createSuccessResultControls(composite, successResult);
@@ -142,11 +174,64 @@ public class LiveEditResultDialog extends Dialog {
private void createErrorMessageControls(Composite parent, String text) {
Text textControl = new Text(parent, SWT.WRAP);
- Display display = textControl.getDisplay();
+ Display display = parent.getDisplay();
textControl.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
textControl.setText(text);
}
+ private void createErrorWithPositionControls(Composite parent, String localMessage,
+ String remoteMessage,
+ final TextStreamPosition startPosition,
+ TextStreamPosition endPosition) {
+ Display display = parent.getDisplay();
+
+ Composite messageComposite;
+ {
+ messageComposite = new Composite(parent, SWT.NONE);
+ GridLayout gridLayout = new GridLayout(2, false);
+ messageComposite.setLayout(gridLayout);
+
+ Label localMessageLabel = new Label(messageComposite, SWT.NONE);
+ localMessageLabel.setText(localMessage);
+ Text textControl = new Text(messageComposite, SWT.READ_ONLY);
+ textControl.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
+ textControl.setText(remoteMessage);
+ textControl.setEditable(false);
+ }
+
+ Composite positionComposite;
+ {
+ positionComposite = new Composite(parent, SWT.NONE);
+ GridLayout gridLayout = new GridLayout(2, false);
+ positionComposite.setLayout(gridLayout);
+
+ Label startLabel = new Label(positionComposite, SWT.NONE);
+ startLabel.setText(NLS.bind(Messages.LiveEditResultDialog_LINE_COLUMN,
+ startPosition.getLine(), startPosition.getColumn()));
+
+ Button setPositionButton = new Button(positionComposite, SWT.NONE);
+ setPositionButton.setText(Messages.LiveEditResultDialog_SELECT_IN_EDITOR);
+ if (positionHighlighter == null) {
+ setPositionButton.setEnabled(false);
+ } else {
+ final int length;
+ if (endPosition == null) {
+ length = 0;
+ } else {
+ length = endPosition.getOffset() - startPosition.getOffset();
+ }
+ setPositionButton.addSelectionListener(new SelectionListener() {
+ @Override public void widgetSelected(SelectionEvent e) {
+ positionHighlighter.highlight(startPosition.getOffset(), length);
+ }
+ @Override public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(null);
+ }
+ });
+ }
+ }
+ }
+
private void createSuccessResultControls(Composite parent, SuccessResult successResult) {
Label label1 = new Label(parent, SWT.NONE);
label1.setText(Messages.LiveEditResultDialog_SUCCESS);
@@ -246,8 +331,18 @@ public class LiveEditResultDialog extends Dialog {
return statusCol;
}
private final SingleInputVisitor<String> textGetterVisitor = new SingleInputVisitor<String>() {
- public String visitErrorMessage(String text) {
- return NLS.bind(Messages.LiveEditResultDialog_FAILURE, text);
+ public String visitErrorMessage(final String text, UpdatableScript.Failure failure) {
+ String message = failure.accept(new UpdatableScript.Failure.Visitor<String>() {
+ @Override public String visitUnspecified() {
+ return text;
+ }
+ @Override public String visitCompileError(CompileErrorFailure compileError) {
+ TextStreamPosition start = compileError.getStartPosition();
+ return NLS.bind("{0} ({1}:{2})", new Object[] { //$NON-NLS-1$
+ compileError.getCompilerMessage(), start.getLine(), start.getColumn() });
+ }
+ });
+ return NLS.bind(Messages.LiveEditResultDialog_FAILURE, message);
}
public String visitSuccess(SuccessResult successResult) {
return Messages.LiveEditResultDialog_OK;

Powered by Google App Engine
This is Rietveld 408576698