Fixes from Ryan
diff --git a/org.eclipse.ui.externaltools/Ant Builder/org/eclipse/ui/externaltools/internal/ui/ant/NullBuildLogger.java b/org.eclipse.ui.externaltools/Ant Builder/org/eclipse/ui/externaltools/internal/ui/ant/NullBuildLogger.java
new file mode 100644
index 0000000..1cc7f3d
--- /dev/null
+++ b/org.eclipse.ui.externaltools/Ant Builder/org/eclipse/ui/externaltools/internal/ui/ant/NullBuildLogger.java
@@ -0,0 +1,85 @@
+package org.eclipse.ui.externaltools.internal.ui.ant;
+
+import java.io.PrintStream;
+
+import org.apache.tools.ant.*;
+
+/**********************************************************************
+Copyright (c) 2002 IBM Corp. and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Common Public License v0.5
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/cpl-v05.html
+
+Contributors:
+**********************************************************************/
+public class NullBuildLogger implements BuildLogger {
+
+ /**
+ * @see org.apache.tools.ant.BuildLogger#setMessageOutputLevel(int)
+ */
+ public void setMessageOutputLevel(int level) {
+ }
+
+ /**
+ * @see org.apache.tools.ant.BuildLogger#setOutputPrintStream(PrintStream)
+ */
+ public void setOutputPrintStream(PrintStream output) {
+ }
+
+ /**
+ * @see org.apache.tools.ant.BuildLogger#setEmacsMode(boolean)
+ */
+ public void setEmacsMode(boolean emacsMode) {
+ }
+
+ /**
+ * @see org.apache.tools.ant.BuildLogger#setErrorPrintStream(PrintStream)
+ */
+ public void setErrorPrintStream(PrintStream err) {
+ }
+
+ /**
+ * @see org.apache.tools.ant.BuildListener#buildStarted(BuildEvent)
+ */
+ public void buildStarted(BuildEvent event) {
+ }
+
+ /**
+ * @see org.apache.tools.ant.BuildListener#buildFinished(BuildEvent)
+ */
+ public void buildFinished(BuildEvent event) {
+ }
+
+ /**
+ * @see org.apache.tools.ant.BuildListener#targetStarted(BuildEvent)
+ */
+ public void targetStarted(BuildEvent event) {
+ }
+
+ /**
+ * @see org.apache.tools.ant.BuildListener#targetFinished(BuildEvent)
+ */
+ public void targetFinished(BuildEvent event) {
+ }
+
+ /**
+ * @see org.apache.tools.ant.BuildListener#taskStarted(BuildEvent)
+ */
+ public void taskStarted(BuildEvent event) {
+ }
+
+ /**
+ * @see org.apache.tools.ant.BuildListener#taskFinished(BuildEvent)
+ */
+ public void taskFinished(BuildEvent event) {
+ }
+
+ /**
+ * @see org.apache.tools.ant.BuildListener#messageLogged(BuildEvent)
+ */
+ public void messageLogged(BuildEvent event) {
+ }
+
+}
+
diff --git a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/AntFileRunner.java b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/AntFileRunner.java
index 204e141..750db6a 100644
--- a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/AntFileRunner.java
+++ b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/AntFileRunner.java
@@ -18,7 +18,8 @@
* Responsible for running ant files.
*/
public class AntFileRunner extends ExternalToolsRunner {
- private static final String LOGGER_CLASS = "org.eclipse.ui.externaltools.internal.ui.ant.AntBuildLogger"; //$NON-NLS-1$
+ private static final String ANT_LOGGER_CLASS = "org.eclipse.ui.externaltools.internal.ui.ant.AntBuildLogger"; //$NON-NLS-1$
+ private static final String NULL_LOGGER_CLASS = "org.eclipse.ui.externaltools.internal.ui.ant.NullBuildLogger"; //$NON-NLS-1$
private static final String BASE_DIR_PREFIX = "-Dbasedir="; //$NON-NLS-1$
/**
@@ -47,7 +48,9 @@
if (targets.length > 0)
runner.setExecutionTargets(targets);
if (runnerContext.getShowLog())
- runner.addBuildLogger(LOGGER_CLASS);
+ runner.addBuildLogger(ANT_LOGGER_CLASS);
+ else
+ runner.addBuildLogger(NULL_LOGGER_CLASS);
runner.run(monitor);
} catch (CoreException e) {
Throwable carriedException = e.getStatus().getException();
diff --git a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ExternalToolsBuilder.java b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ExternalToolsBuilder.java
index 44208ed..c183ab0 100644
--- a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ExternalToolsBuilder.java
+++ b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ExternalToolsBuilder.java
@@ -48,6 +48,8 @@
context.run(monitor);
} catch (InterruptedException e) {
// Do nothing, the operation was cancelled by the user
+ } finally {
+ forgetLastBuiltState();
}
}
diff --git a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ProgramRunner.java b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ProgramRunner.java
index b8f64cd..c95d96d 100644
--- a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ProgramRunner.java
+++ b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ProgramRunner.java
@@ -45,8 +45,8 @@
p = Runtime.getRuntime().exec(commandLine, null, workingDir);
else
p = Runtime.getRuntime().exec(commandLine);
- new Thread(getRunnable(p.getInputStream(), LogConsoleDocument.getInstance(), LogConsoleDocument.MSG_INFO, finished)).start();
- new Thread(getRunnable(p.getErrorStream(), LogConsoleDocument.getInstance(), LogConsoleDocument.MSG_ERR, finished)).start();
+ new Thread(getRunnable(p.getInputStream(), LogConsoleDocument.getInstance(), LogConsoleDocument.MSG_INFO, finished, runnerContext.getShowLog())).start();
+ new Thread(getRunnable(p.getErrorStream(), LogConsoleDocument.getInstance(), LogConsoleDocument.MSG_ERR, finished, runnerContext.getShowLog())).start();
p.waitFor();
@@ -72,7 +72,7 @@
* Returns a runnable that is used to capture and print out a stream
* from another process.
*/
- private Runnable getRunnable(final InputStream input, final LogConsoleDocument document, final int severity, final boolean[] finished) {
+ private Runnable getRunnable(final InputStream input, final LogConsoleDocument document, final int severity, final boolean[] finished, final boolean showLog) {
return new Runnable() {
public void run() {
try {
@@ -84,7 +84,8 @@
sb.append((char)c);
c = input.read();
}
- document.append(sb.toString(), severity);
+ if (showLog)
+ document.append(sb.toString(), severity);
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
diff --git a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/messages.properties b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/messages.properties
index a661903..e5392a6 100644
--- a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/messages.properties
+++ b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/messages.properties
@@ -39,17 +39,21 @@
EditDialog.browseWkspButton1 = Browse &Workspace...
EditDialog.browseFileSysButton1 = Browse &File System...
EditDialog.browseVarsButton = Browse &Variables...
-EditDialog.browseWkspButton2 = Browse Wor&kspace...
-EditDialog.browseFileSysButton2 = Browse File &System...
-EditDialog.refreshOptionButton = Browse &Options...
+EditDialog.directoryBrowseButton = Browse &Options...
+EditDialog.refreshOptionButton = Browse O&ptions...
EditDialog.browseWorkspaceTitle = Browse Workspace
EditDialog.selectTool = &Select the external tool to use:
EditDialog.selectResource = &Select the resource to use:
+EditDialog.selectContainer = &Select the container to use:
EditDialog.selectDirectory = &Select the working directory to use:
EditDialog.selectTargets = &Select the Ant targets to use:
EditDialog.selectFolder = &Select the folder to use:
EditDialog.browseVarTitle = Browse Variables
+EditDialog.browseDirTitle = Browse Working Directory Options
EditDialog.selectVar = &Select a variable to use:
+EditDialog.selectDir = &Select a working directory option:
+EditDialog.dirBrowseWorkspace = Browse workspace
+EditDialog.dirBrowseFileSystem = Browse file system
EditDialog.varWorkspaceLocLabel = Workspace location
EditDialog.varProjectLocLabel = Selected resource's project location
EditDialog.varContainerLocLabel = Selected resource's container location
diff --git a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/AntLaunchWizardPage.java b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/AntLaunchWizardPage.java
index c3289bf..16677f3 100644
--- a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/AntLaunchWizardPage.java
+++ b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/AntLaunchWizardPage.java
@@ -67,7 +67,7 @@
* Method declared on IWizardPage.
*/
public void createControl(Composite parent) {
- WorkbenchHelp.setHelp(getControl(), IHelpContextIds.ANT_LAUNCH_WIZARD_PAGE);
+ WorkbenchHelp.setHelp(parent, IHelpContextIds.ANT_LAUNCH_WIZARD_PAGE);
Composite composite = new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout());
diff --git a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/EditDialog.java b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/EditDialog.java
index ec2f2fa..86feb9e 100644
--- a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/EditDialog.java
+++ b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/EditDialog.java
@@ -58,8 +58,8 @@
private Button locationBrowseWorkspace;
private Button locationBrowseFileSystem;
private Button argumentsBrowseVariable;
- private Button directoryBrowseWorkspace;
- private Button directoryBrowseFileSystem;
+// private Button directoryBrowseWorkspace;
+ private Button directoryBrowseButton;
private Button refreshOptionButton;
private Button showLog;
@@ -141,7 +141,7 @@
// Need to keep track of the FormData's for the buttons to set
// the width of all the buttons to be the same as the largest
// button width
- FormData[] buttonData = new FormData[6];
+ FormData[] buttonData = new FormData[5];
// Create name label
Label nameLabel = new Label(topComp, SWT.NONE);
@@ -221,39 +221,30 @@
argumentsBrowseVariable.setLayoutData(buttonData[2]);
checkForMaxWidth(argumentsBrowseVariable);
- // Create directory browse workspace button.
- directoryBrowseWorkspace = new Button(topComp, SWT.PUSH);
- directoryBrowseWorkspace.setText(ToolMessages.getString("EditDialog.browseWkspButton2")); //$NON-NLS-1$
- buttonData[3] = new FormData();
- buttonData[3].left = new FormAttachment(argumentsBrowseVariable, 0, SWT.LEFT);
- buttonData[3].top = new FormAttachment(argumentsBrowseVariable, GROUP_SPACE, SWT.BOTTOM);
- directoryBrowseWorkspace.setLayoutData(buttonData[3]);
- checkForMaxWidth(directoryBrowseWorkspace);
-
// Create label for directory text field.
Label dirLabel = new Label(topComp, SWT.NONE);
dirLabel.setText(ToolMessages.getString("EditDialog.dirLabel")); //$NON-NLS-1$
data = new FormData();
- data.bottom = new FormAttachment(directoryBrowseWorkspace, 0, SWT.BOTTOM);
+ data.top = new FormAttachment(argumentsField, GROUP_SPACE+buttonLabelHeightDiff, SWT.BOTTOM);
dirLabel.setLayoutData(data);
// Create directory text field.
directoryField = new Text(topComp, SWT.BORDER);
data = new FormData();
data.left = new FormAttachment(0, 0);
- data.right = new FormAttachment(directoryBrowseWorkspace, -MARGIN_SPACE, SWT.LEFT);
- data.top = new FormAttachment(directoryBrowseWorkspace, WIDGET_SPACE, SWT.BOTTOM);
+ data.right = new FormAttachment(argumentsBrowseVariable, -MARGIN_SPACE, SWT.LEFT);
+ data.top = new FormAttachment(dirLabel, WIDGET_SPACE, SWT.BOTTOM);
data.width = FIELD_WIDTH;
directoryField.setLayoutData(data);
// Create directory browse file system button.
- directoryBrowseFileSystem = new Button(topComp, SWT.PUSH);
- directoryBrowseFileSystem.setText(ToolMessages.getString("EditDialog.browseFileSysButton2")); //$NON-NLS-1$
- buttonData[4] = new FormData();
- buttonData[4].left = new FormAttachment(argumentsField, MARGIN_SPACE, SWT.RIGHT);
- buttonData[4].bottom = new FormAttachment(directoryField, 0, SWT.BOTTOM);
- directoryBrowseFileSystem.setLayoutData(buttonData[4]);
- checkForMaxWidth(directoryBrowseFileSystem);
+ directoryBrowseButton = new Button(topComp, SWT.PUSH);
+ directoryBrowseButton.setText(ToolMessages.getString("EditDialog.directoryBrowseButton")); //$NON-NLS-1$
+ buttonData[3] = new FormData();
+ buttonData[3].left = new FormAttachment(argumentsField, MARGIN_SPACE, SWT.RIGHT);
+ buttonData[3].bottom = new FormAttachment(directoryField, 0, SWT.BOTTOM);
+ directoryBrowseButton.setLayoutData(buttonData[3]);
+ checkForMaxWidth(directoryBrowseButton);
// Create refresh check box and label.
Label refreshLabel = new Label(topComp, SWT.NONE);
@@ -275,10 +266,11 @@
// Create refresh scope.
refreshOptionButton = new Button(topComp, SWT.PUSH);
refreshOptionButton.setText(ToolMessages.getString("EditDialog.refreshOptionButton")); //$NON-NLS-1$
- buttonData[5] = new FormData();
- buttonData[5].left = new FormAttachment(directoryBrowseFileSystem, 0, SWT.LEFT);
- buttonData[5].top = new FormAttachment(refreshField, 0, SWT.TOP);
- refreshOptionButton.setLayoutData(buttonData[5]);
+ buttonData[4] = new FormData();
+ buttonData[4].left = new FormAttachment(directoryBrowseButton, 0, SWT.LEFT);
+ buttonData[4].top = new FormAttachment(refreshField, 0, SWT.TOP);
+ refreshOptionButton.setLayoutData(buttonData[4]);
+ checkForMaxWidth(refreshOptionButton);
// Create show log checkbox
showLog = new Button(topComp, SWT.CHECK);
@@ -318,8 +310,7 @@
argumentsField,
argumentsBrowseVariable,
directoryField,
- directoryBrowseWorkspace,
- directoryBrowseFileSystem,
+ directoryBrowseButton,
refreshField,
refreshOptionButton};
topComp.setTabList(tabList);
@@ -397,31 +388,12 @@
}
});
- directoryBrowseWorkspace.addSelectionListener(new SelectionAdapter() {
+ directoryBrowseButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
- ContainerSelectionDialog dialog = new ContainerSelectionDialog(
- getShell(),
- ResourcesPlugin.getWorkspace().getRoot(),
- false,
- ToolMessages.getString("EditDialog.selectFolder")); //$NON-NLS-1$
- dialog.showClosedProjects(false);
- dialog.setTitle(ToolMessages.getString("EditDialog.browseWorkspaceTitle")); //$NON-NLS-1$
+ DirectorySelectionDialog dialog = new DirectorySelectionDialog(getShell());
dialog.open();
- Object[] result = dialog.getResult();
- if (result != null && result.length == 1) {
- StringBuffer buf = new StringBuffer();
- ToolUtil.buildVariableTag(ExternalTool.VAR_WORKSPACE_LOC, result[0].toString(), buf);
- directoryField.setText(buf.toString());
- }
- }
- });
-
- directoryBrowseFileSystem.addSelectionListener(new SelectionAdapter() {
- public void widgetSelected(SelectionEvent e) {
- DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.SAVE);
- dialog.setMessage(ToolMessages.getString("EditDialog.selectDirectory")); //$NON-NLS-1$
- dialog.setFilterPath(directoryField.getText());
- String selectedDirectory = dialog.open();
+ Object[] results = dialog.getResult();
+ String selectedDirectory = (String)results[0];
if (selectedDirectory != null) {
directoryField.setText(selectedDirectory);
}
@@ -832,6 +804,109 @@
}
}
+ /**
+ * Internal dialog to show available variables from which
+ * the user can select one.
+ */
+ private class DirectorySelectionDialog extends SelectionDialog {
+ String location;
+ List list;
+
+ public DirectorySelectionDialog(Shell parent) {
+ super(parent);
+ setTitle(ToolMessages.getString("EditDialog.browseDirTitle")); //$NON-NLS-1$
+ WorkbenchHelp.setHelp(parent, IHelpContextIds.VARIABLE_SELECTION_DIALOG);
+ }
+
+ /* (non-Javadoc)
+ * Method declared on Dialog.
+ */
+ protected Control createDialogArea(Composite parent) {
+ // create composite
+ Composite dialogArea = (Composite)super.createDialogArea(parent);
+
+ Label label = new Label(dialogArea, SWT.LEFT);
+ label.setText(ToolMessages.getString("EditDialog.selectDir")); //$NON-NLS-1$
+
+ list = new List(dialogArea, SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE | SWT.BORDER);
+ GridData data = new GridData(GridData.FILL_BOTH);
+ data.heightHint = SIZING_SELECTION_PANE_HEIGHT;
+ data.widthHint = SIZING_SELECTION_PANE_WIDTH;
+ list.setLayoutData(data);
+
+ list.add(ToolMessages.getString("EditDialog.varWorkspaceLocLabel")); //$NON-NLS-1$
+ list.add(ToolMessages.getString("EditDialog.varProjectLocLabel")); //$NON-NLS-1$
+ list.add(ToolMessages.getString("EditDialog.varContainerLocLabel")); //$NON-NLS-1$
+ list.add(ToolMessages.getString("EditDialog.varResourceLocLabel")); //$NON-NLS-1$
+ list.add(ToolMessages.getString("EditDialog.dirBrowseWorkspace")); //$NON-NLS-1$
+ list.add(ToolMessages.getString("EditDialog.dirBrowseFileSystem")); //NON-NLS-1$)
+
+ return dialogArea;
+ }
+
+ /* (non-Javadoc)
+ * Method declared on Dialog.
+ */
+ protected void okPressed() {
+ int sel = list.getSelectionIndex();
+ String result = null;
+
+ switch (sel) {
+ case 0 :
+ result = ToolUtil.buildVariableTag(ExternalTool.VAR_WORKSPACE_LOC, null);
+ break;
+
+ case 1 :
+ result = ToolUtil.buildVariableTag(ExternalTool.VAR_PROJECT_LOC, null);
+ break;
+
+ case 2 :
+ result = ToolUtil.buildVariableTag(ExternalTool.VAR_CONTAINER_LOC, null);
+ break;
+
+ case 3 :
+ result = ToolUtil.buildVariableTag(ExternalTool.VAR_RESOURCE_LOC, null);
+ break;
+
+ case 4 :
+ result = showContainerDialog();
+ break;
+
+ case 5 :
+ result = showDirectoryDialog();
+ break;
+
+ }
+
+ if (result != null)
+ setSelectionResult(new Object[] {result});
+ super.okPressed();
+ }
+
+ private String showContainerDialog() {
+ String varName = ExternalTool.VAR_WORKSPACE_LOC;
+ ContainerSelectionDialog containerDialog;
+ containerDialog = new ContainerSelectionDialog(
+ getShell(),
+ ResourcesPlugin.getWorkspace().getRoot(),
+ false,
+ ToolMessages.getString("EditDialog.selectContainer")); //$NON-NLS-1$
+ containerDialog.open();
+ Object[] resource = containerDialog.getResult();
+ if (resource != null && resource.length > 0)
+ return ToolUtil.buildVariableTag(varName, ((IPath)resource[0]).toString());
+ else
+ return null;
+ }
+
+ private String showDirectoryDialog() {
+ DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.SAVE);
+ dialog.setMessage(ToolMessages.getString("EditDialog.selectDirectory")); //$NON-NLS-1$
+ dialog.setFilterPath(directoryField.getText());
+ return dialog.open();
+ }
+ }
+
/**
* Internal dialog to show available refresh scope from which
* the user can select one.
diff --git a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/ExternalToolsAction.java b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/ExternalToolsAction.java
index 68ea068..c03c76f 100644
--- a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/ExternalToolsAction.java
+++ b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/ExternalToolsAction.java
@@ -172,6 +172,11 @@
ToolUtil.saveDirtyEditors(window);
+ // Selection is assigned BEFORE Log Console is given focus.
+ // Otherwise incorrect selection is used. Selection is assigned outside
+ // runnable.run(IProgressMonitor) to avoid invalid thread access.
+ final ISelection sel = window.getSelectionService().getSelection();
+
if (tool.getShowLog()) {
ToolUtil.showLogConsole(window);
ToolUtil.clearLogDocument();
@@ -180,11 +185,15 @@
IRunnableWithProgress runnable = new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
IResource resource = null;
- ISelection sel = window.getSelectionService().getSelection();
if (sel instanceof IStructuredSelection) {
Object result = ((IStructuredSelection)sel).getFirstElement();
if (result instanceof IResource)
resource = (IResource) result;
+ else if (result instanceof IAdaptable) {
+ Object temp = ((IAdaptable) result).getAdapter(IResource.class);
+ if (temp instanceof IResource)
+ resource = (IResource) temp;
+ }
}
DefaultRunnerContext context;
if (resource != null)
diff --git a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/LogConsoleView.java b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/LogConsoleView.java
index a8fd3fe..61a8d27 100644
--- a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/LogConsoleView.java
+++ b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/LogConsoleView.java
Binary files differ