Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsarsenau2002-07-29 15:06:09 +0000
committersarsenau2002-07-29 15:06:09 +0000
commita0799ce975d23441a4bb3cea68a87f17c48f963f (patch)
tree197b147b486a892b958a35f90f95d20dea1f3b43
parent5539bd91d48212539a480101453cc4eea0f7dbf3 (diff)
downloadeclipse.platform.debug-a0799ce975d23441a4bb3cea68a87f17c48f963f.tar.gz
eclipse.platform.debug-a0799ce975d23441a4bb3cea68a87f17c48f963f.tar.xz
eclipse.platform.debug-a0799ce975d23441a4bb3cea68a87f17c48f963f.zip
Fix for PR 21775 - [External Tools] Allow external tool builders to run on specific build type(s)
-rw-r--r--org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/DefaultRunnerContext.java10
-rw-r--r--org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ExternalTool.java103
-rw-r--r--org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ExternalToolsBuilder.java3
-rw-r--r--org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ToolUtil.java8
-rw-r--r--org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java6
-rw-r--r--org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/ConfigurationDialog.java4
-rw-r--r--org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/EditDialog.java52
7 files changed, 163 insertions, 23 deletions
diff --git a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/DefaultRunnerContext.java b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/DefaultRunnerContext.java
index f19e18537..2f5aa6ea4 100644
--- a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/DefaultRunnerContext.java
+++ b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/DefaultRunnerContext.java
@@ -30,7 +30,7 @@ public final class DefaultRunnerContext implements IRunnerContext {
private String expandedLocation;
private String expandedArguments;
private String expandedDirectory;
- private String buildType = ToolUtil.BUILD_TYPE_NONE;
+ private String buildType = ExternalTool.BUILD_TYPE_NONE;
/**
* Create a new context
@@ -483,12 +483,12 @@ public final class DefaultRunnerContext implements IRunnerContext {
*/
/*package*/ void setBuildType(int kind) {
if (kind == IncrementalProjectBuilder.INCREMENTAL_BUILD)
- buildType = ToolUtil.BUILD_TYPE_INCREMENTAL;
+ buildType = ExternalTool.BUILD_TYPE_INCREMENTAL;
else if (kind == IncrementalProjectBuilder.FULL_BUILD)
- buildType = ToolUtil.BUILD_TYPE_FULL;
+ buildType = ExternalTool.BUILD_TYPE_FULL;
else if (kind == IncrementalProjectBuilder.AUTO_BUILD)
- buildType = ToolUtil.BUILD_TYPE_AUTO;
+ buildType = ExternalTool.BUILD_TYPE_AUTO;
else
- buildType = ToolUtil.BUILD_TYPE_NONE;
+ buildType = ExternalTool.BUILD_TYPE_NONE;
}
} \ No newline at end of file
diff --git a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ExternalTool.java b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ExternalTool.java
index ddc315a6d..4ab3599f0 100644
--- a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ExternalTool.java
+++ b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ExternalTool.java
@@ -11,6 +11,7 @@ Contributors:
**********************************************************************/
import java.util.HashMap;
import java.util.Map;
+import java.util.StringTokenizer;
import org.eclipse.core.resources.ICommand;
@@ -36,6 +37,7 @@ public class ExternalTool {
private static final String TAG_TOOL_DIRECTORY = "!{tool_dir}"; //$NON-NLS-1$
private static final String TAG_TOOL_REFRESH = "!{tool_refresh}"; //$NON-NLS-1$
private static final String TAG_TOOL_SHOW_LOG = "!{tool_show_log}"; //$NON-NLS-1$
+ private static final String TAG_TOOL_BUILD_TYPES = "!{tool_build_types}"; //$NON-NLS-1$
// Known kind of tools
public static final String TOOL_TYPE_PROGRAM = "org.eclipse.ui.externaltools.type.program"; //$NON-NLS-1$
@@ -62,7 +64,17 @@ public class ExternalTool {
public static final String VAR_ANT_TARGET = "ant_target"; //$NON-NLS-1$
public static final String VAR_BUILD_TYPE = "build_type"; //$NON-NLS-1$
-
+
+ /**
+ * Build types (what type of build is occuring when a tool is run)
+ */
+ public static final String BUILD_TYPE_INCREMENTAL = "incremental"; //$NON-NLS-1$
+ public static final String BUILD_TYPE_FULL = "full"; //$NON-NLS-1$
+ public static final String BUILD_TYPE_AUTO = "auto"; //$NON-NLS-1$
+ public static final String BUILD_TYPE_NONE = "none"; //$NON-NLS-1$
+
+ private static final String SEPERATOR = ";"; //$NON-NLS-1$
+
// Known refresh scopes
public static final String REFRESH_SCOPE_NONE = "none"; //$NON-NLS-1$;
public static final String REFRESH_SCOPE_WORKSPACE = "workspace"; //$NON-NLS-1$;
@@ -80,6 +92,7 @@ public class ExternalTool {
private String directory = EMPTY_VALUE;
private String refreshScope = EMPTY_VALUE;
private boolean showLog = true;
+ private String[] buildTypes;
/**
* Creates an empty initialized external tool.
@@ -129,7 +142,7 @@ public class ExternalTool {
else
showLog = true;
- return new ExternalTool(
+ ExternalTool tool = new ExternalTool(
type,
name,
location,
@@ -137,6 +150,9 @@ public class ExternalTool {
(String)args.get(TAG_TOOL_DIRECTORY),
(String)args.get(TAG_TOOL_REFRESH),
showLog);
+ tool.buildTypes = toBuildTypesArray((String)args.get(TAG_TOOL_BUILD_TYPES));
+
+ return tool;
}
/**
@@ -173,6 +189,80 @@ public class ExternalTool {
public String getWorkingDirectory() {
return directory;
}
+
+ /**
+ * Returns whether the tool runs for the given build kind.
+ *
+ * @param kind The kind of build. Either
+ * ExternalToolsBuilder.FULL_BUILD,
+ * ExternalToolsBuilder.INCREMENTAL_BUILD,
+ * or ExternalToolsBuilder.AUTO_BUILD.
+ */
+ public boolean runForBuildKind(int kind) {
+ return runForBuildType(convertToType(kind));
+ }
+
+ /**
+ * Returns whether the tool runs for the given build type.
+ *
+ * @param type The type of build. Either
+ * BUILD_TYPE_FULL, BUILD_TYPE_INCREMENTAL, or BUILD_TYPE_AUTO.
+ */
+ public boolean runForBuildType(String type) {
+ for (int i=0; i<buildTypes.length; i++) {
+ if (buildTypes[i].equals(type))
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Converts a build kind (either ExternalToolBuilder.FULL_BUILD,
+ * ExternalToolBuilder.INCREMENTAL_BUILD, or
+ * ExternalToolBuilder.AUTO_BUILD) to a build type (either
+ * BUILD_TYPE_FULL, BUILD_TYPE_INCREMENTAL, or BUILD_TYPE_AUTO).
+ */
+ private String convertToType(int kind) {
+ if (kind == ExternalToolsBuilder.FULL_BUILD)
+ return BUILD_TYPE_FULL;
+ if (kind == ExternalToolsBuilder.INCREMENTAL_BUILD)
+ return BUILD_TYPE_INCREMENTAL;
+ if (kind == ExternalToolsBuilder.AUTO_BUILD)
+ return BUILD_TYPE_AUTO;
+ // Should never reach here.
+ return null;
+ }
+
+ /**
+ * Translates an array of build types to a single String
+ * representation for storage in an argument map.
+ */
+ private static String toBuildTypesString(String[] array) {
+ String s = "";
+ for (int i=0; i < array.length; i++)
+ s = s + array[i] + SEPERATOR;
+ return s;
+ }
+
+ /**
+ * Translates a single String representation of build types
+ * used for storage in an argument map to an array of build
+ * types.
+ */
+ private static String[] toBuildTypesArray(String string) {
+ if (string==null)
+ return new String[0];
+ StringTokenizer tokenizer =
+ new StringTokenizer(string, SEPERATOR);
+ int tokenCount = tokenizer.countTokens();
+ String[] elements = new String[tokenCount];
+
+ for (int i = 0; i < tokenCount; i++) {
+ elements[i] = tokenizer.nextToken();
+ }
+
+ return elements;
+ }
/**
* Returns the scope of resources to refresh after
@@ -260,6 +350,14 @@ public class ExternalTool {
}
/**
+ * Sets the types of builds for which this external tool runs if it
+ * is a builder on a project.
+ */
+ public void setBuildTypes(String[] buildTypes) {
+ this.buildTypes = buildTypes;
+ }
+
+ /**
* Stores the external tool as an argument map that can be
* used later on to recreate this external tool.
*
@@ -277,6 +375,7 @@ public class ExternalTool {
args.put(TAG_TOOL_SHOW_LOG, TRUE);
else
args.put(TAG_TOOL_SHOW_LOG, FALSE);
+ args.put(TAG_TOOL_BUILD_TYPES, toBuildTypesString(buildTypes));
return args;
}
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 0f8895f11..f636051bd 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
@@ -46,7 +46,8 @@ public final class ExternalToolsBuilder extends IncrementalProjectBuilder {
DefaultRunnerContext context = new DefaultRunnerContext(tool, getProject(), PlatformUI.getWorkbench().getWorkingSetManager());
context.setBuildType(kind);
try {
- context.run(monitor);
+ if (tool.runForBuildKind(kind))
+ context.run(monitor);
} catch (InterruptedException e) {
// Do nothing, the operation was cancelled by the user
} finally {
diff --git a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ToolUtil.java b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ToolUtil.java
index a9d2b6f95..062769689 100644
--- a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ToolUtil.java
+++ b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/core/ToolUtil.java
@@ -27,14 +27,6 @@ public final class ToolUtil {
/*package*/ static final String VAR_TAG_START = "${"; //$NON-NLS-1$
/*package*/ static final String VAR_TAG_END = "}"; //$NON-NLS-1$
/*package*/ static final String VAR_TAG_SEP = ":"; //$NON-NLS-1$
-
- /**
- * Build types (what type of build is occuring when a tool is run)
- */
- public static final String BUILD_TYPE_INCREMENTAL = "incremental"; //$NON-NLS-1$
- public static final String BUILD_TYPE_FULL = "full"; //$NON-NLS-1$
- public static final String BUILD_TYPE_AUTO = "auto"; //$NON-NLS-1$
- public static final String BUILD_TYPE_NONE = "none"; //$NON-NLS-1$
private static final ToolUtil instance = new ToolUtil();
diff --git a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java
index 11657747a..78ba8ee9c 100644
--- a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java
+++ b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java
@@ -89,8 +89,7 @@ public final class BuilderPropertyPage extends PropertyPage {
*/
private ICommand createTool() {
try {
- EditDialog dialog;
- dialog = new EditDialog(getShell(), null);
+ EditDialog dialog = new EditDialog(getShell(), null, true);
if (dialog.open() == Window.OK) {
ExternalTool tool = dialog.getExternalTool();
ICommand command = getInputProject().getDescription().newCommand();
@@ -111,8 +110,7 @@ public final class BuilderPropertyPage extends PropertyPage {
ExternalTool tool = ExternalTool.fromArgumentMap(command.getArguments());
if (tool == null)
return;
- EditDialog dialog;
- dialog = new EditDialog(getShell(), tool);
+ EditDialog dialog = new EditDialog(getShell(), tool, true);
if (dialog.open() == Window.OK) {
tool = dialog.getExternalTool();
tool.toBuildCommand(command);
diff --git a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/ConfigurationDialog.java b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/ConfigurationDialog.java
index 64b9ed7e8..67c9c0407 100644
--- a/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/ConfigurationDialog.java
+++ b/org.eclipse.ui.externaltools/External Tools/org/eclipse/ui/externaltools/internal/ui/ConfigurationDialog.java
@@ -185,7 +185,7 @@ public class ConfigurationDialog extends TitleAreaDialog {
newButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
EditDialog dialog;
- dialog = new EditDialog(getShell(), null);
+ dialog = new EditDialog(getShell(), null, false);
if (dialog.open() == Window.OK) {
ExternalTool tool = dialog.getExternalTool();
tools.add(tool);
@@ -274,7 +274,7 @@ public class ConfigurationDialog extends TitleAreaDialog {
if (currentSelection == null)
return;
EditDialog dialog;
- dialog = new EditDialog(getShell(), currentSelection);
+ dialog = new EditDialog(getShell(), currentSelection, false);
dialog.open();
listViewer.update(currentSelection, null);
updateDetails();
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 999753aae..6ae4ea148 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
@@ -62,8 +62,12 @@ public class EditDialog extends TitleAreaDialog {
private Button directoryBrowseButton;
private Button refreshOptionButton;
private Button showLog;
+ private Button fullBuild;
+ private Button incrementalBuild;
+ private Button autoBuild;
private boolean editMode = false;
+ private boolean toolIsBuilder;
private ExternalTool tool;
private String refreshScope;
@@ -78,7 +82,7 @@ public class EditDialog extends TitleAreaDialog {
* @param parentShell the parent SWT shell
* @param tool the tool tool to edit, <code>null</code> if new
*/
- public EditDialog(Shell parentShell, ExternalTool tool) {
+ public EditDialog(Shell parentShell, ExternalTool tool, boolean isBuilderTool) {
super(parentShell);
if (tool == null) {
this.tool = new ExternalTool();
@@ -87,6 +91,7 @@ public class EditDialog extends TitleAreaDialog {
this.tool = tool;
this.editMode = true;
}
+ this.toolIsBuilder = isBuilderTool;
}
/* (non-Javadoc)
@@ -282,6 +287,35 @@ public class EditDialog extends TitleAreaDialog {
data.top = new FormAttachment(refreshField, GROUP_SPACE, SWT.BOTTOM);
showLog.setLayoutData(data);
+ if (toolIsBuilder) {
+ // Create checkboxes for which build types to run on.
+ Composite buildComp = new Composite(topComp, SWT.NONE);
+ data = new FormData();
+ data.left = new FormAttachment(0,0);
+ data.top = new FormAttachment(showLog, GROUP_SPACE, SWT.BOTTOM);
+ buildComp.setLayoutData(data);
+
+ GridLayout gridLayout = new GridLayout(4, false);
+ gridLayout.marginHeight = 0;
+ gridLayout.marginWidth = 0;
+ buildComp.setLayout(gridLayout);
+
+ Label buildLabel = new Label(buildComp, SWT.NONE);
+ buildLabel.setText("Run on:\t");
+
+ fullBuild = new Button(buildComp, SWT.CHECK);
+ fullBuild.setText("Full build");
+ fullBuild.setSelection(true);
+
+ incrementalBuild = new Button(buildComp, SWT.CHECK);
+ incrementalBuild.setText("Incremental build");
+ incrementalBuild.setSelection(true);
+
+ autoBuild = new Button(buildComp, SWT.CHECK);
+ autoBuild.setText("Auto-build");
+ autoBuild.setSelection(true);
+ }
+
// give all the buttons the same width
for (int i=0; i<buttonData.length; i++) {
buttonData[i].width = maxButtonWidth;
@@ -298,6 +332,11 @@ public class EditDialog extends TitleAreaDialog {
argumentsField.setText(tool.getArguments());
directoryField.setText(tool.getWorkingDirectory());
showLog.setSelection(tool.getShowLog());
+ if (toolIsBuilder) {
+ fullBuild.setSelection(tool.runForBuildType(tool.BUILD_TYPE_FULL));
+ incrementalBuild.setSelection(tool.runForBuildType(tool.BUILD_TYPE_INCREMENTAL));
+ autoBuild.setSelection(tool.runForBuildType(tool.BUILD_TYPE_AUTO));
+ }
}
refreshScope = tool.getRefreshScope();
updateRefreshField();
@@ -520,6 +559,17 @@ public class EditDialog extends TitleAreaDialog {
tool.setRefreshScope(refreshScope);
tool.setShowLog(showLog.getSelection());
+ ArrayList list = new ArrayList();
+ if (toolIsBuilder) {
+ if (fullBuild.getSelection())
+ list.add(tool.BUILD_TYPE_FULL);
+ if (incrementalBuild.getSelection())
+ list.add(tool.BUILD_TYPE_INCREMENTAL);
+ if (autoBuild.getSelection())
+ list.add(tool.BUILD_TYPE_AUTO);
+ }
+ tool.setBuildTypes((String[])list.toArray(new String[list.size()]));
+
super.okPressed();
}

Back to the top