Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarin Swanson2003-07-08 18:57:34 +0000
committerDarin Swanson2003-07-08 18:57:34 +0000
commitcd0f0784963a241b93424ce81c36ed4d31942a3e (patch)
treeb2cab66de57f164eb06d0454d822fefca3aa492c /org.eclipse.ui.externaltools
parent16ddf03d7b86c95c42305c3f77dcf9a8ffaa3ff9 (diff)
downloadeclipse.platform.debug-cd0f0784963a241b93424ce81c36ed4d31942a3e.tar.gz
eclipse.platform.debug-cd0f0784963a241b93424ce81c36ed4d31942a3e.tar.xz
eclipse.platform.debug-cd0f0784963a241b93424ce81c36ed4d31942a3e.zip
Bug 39713 - Ant build not triggered on second save
Bug 38614 - External tool builder not triggered when checking project out from repository
Diffstat (limited to 'org.eclipse.ui.externaltools')
-rw-r--r--org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolBuilder.java89
1 files changed, 53 insertions, 36 deletions
diff --git a/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolBuilder.java b/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolBuilder.java
index a0ace5bb1..5ea12f6ca 100644
--- a/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolBuilder.java
+++ b/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/model/ExternalToolBuilder.java
@@ -15,6 +15,7 @@ import java.text.MessageFormat;
import java.util.Map;
import java.util.StringTokenizer;
+import org.eclipse.core.resources.ICommand;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
@@ -27,7 +28,7 @@ import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.ui.externaltools.internal.launchConfigurations.ExternalToolsUtil;
/**
- * This project builder implementation will run an external tool during the
+ * This project builder implementation will run an external tool or tools during the
* build process.
* <p>
* Note that there is only ever one instance of ExternalToolBuilder per project,
@@ -44,45 +45,61 @@ public final class ExternalToolBuilder extends IncrementalProjectBuilder {
private static String buildType = IExternalToolConstants.BUILD_TYPE_NONE;
+ private boolean buildKindCompatible(int kind, ILaunchConfiguration config) throws CoreException {
+ int[] buildKinds = buildTypesToArray((String) config.getAttribute(IExternalToolConstants.ATTR_RUN_BUILD_KINDS, "")); //$NON-NLS-1$
+ for (int j = 0; j < buildKinds.length; j++) {
+ if (kind == buildKinds[j]) {
+ return true;
+ }
+ }
+ return false;
+ }
+
/* (non-Javadoc)
* Method declared on IncrementalProjectBuilder.
*/
protected IProject[] build(int kind, Map args, IProgressMonitor monitor) throws CoreException {
- ILaunchConfiguration config= ExternalToolsUtil.configFromBuildCommandArgs(args);
- if (config == null) {
- return null;
- }
- boolean runTool = false;
- int[] buildKinds = buildTypesToArray((String)config.getAttribute(IExternalToolConstants.ATTR_RUN_BUILD_KINDS, "")); //$NON-NLS-1$
- for (int i = 0; i < buildKinds.length; i++) {
- if (kind == buildKinds[i]) {
- runTool = true;
- break;
+ if (kind == FULL_BUILD) {
+ ILaunchConfiguration config = ExternalToolsUtil.configFromBuildCommandArgs(args);
+ if (config != null && buildKindCompatible(kind, config)) {
+ launchBuild(kind, config, monitor);
}
- }
- if (!runTool) {
return null;
}
- boolean buildForChange= true;
- if (kind != FULL_BUILD) {
- IResource[] resources= ExternalToolsUtil.getResourcesForBuildScope(config, monitor);
- if (resources != null && resources.length > 0) {
- buildForChange= buildScopeIndicatesBuild(resources);
+ //need to build all external tools from one builder (see bug 39713)
+ //if not a full build
+ ICommand[] commands = getProject().getDescription().getBuildSpec();
+ for (int i = 0; i < commands.length; i++) {
+ if (ID.equals(commands[i].getBuilderName())){
+ ILaunchConfiguration config = ExternalToolsUtil.configFromBuildCommandArgs(commands[i].getArguments());
+ if (config != null && buildKindCompatible(kind, config)) {
+ doBuild(kind, commands[i].getArguments(), config, monitor);
+ }
}
}
-
+ return null;
+ }
+
+ protected void doBuild(int kind, Map args, ILaunchConfiguration config, IProgressMonitor monitor) throws CoreException {
+ boolean buildForChange = true;
+ IResource[] resources = ExternalToolsUtil.getResourcesForBuildScope(config, monitor);
+ if (resources != null && resources.length > 0) {
+ buildForChange = buildScopeIndicatesBuild(resources);
+ }
+
if (buildForChange) {
- monitor.subTask(MessageFormat.format(ExternalToolsModelMessages.getString("ExternalToolBuilder.Running_{0}..._1"), new String[]{config.getName()})); //$NON-NLS-1$
- buildStarted(kind);
- config.launch(ILaunchManager.RUN_MODE, monitor);
- buildEnded();
- forgetLastBuiltState();
+ launchBuild(kind, config, monitor);
}
-
- return null;
}
+ private void launchBuild(int kind, ILaunchConfiguration config, IProgressMonitor monitor) throws CoreException {
+ monitor.subTask(MessageFormat.format(ExternalToolsModelMessages.getString("ExternalToolBuilder.Running_{0}..._1"), new String[] { config.getName()})); //$NON-NLS-1$
+ buildStarted(kind);
+ config.launch(ILaunchManager.RUN_MODE, monitor);
+ buildEnded();
+ }
+
/**
* Returns the build type being performed if the
* external tool is being run as a project builder.
@@ -124,8 +141,10 @@ public final class ExternalToolBuilder extends IncrementalProjectBuilder {
private boolean buildScopeIndicatesBuild(IResource[] resources) {
for (int i = 0; i < resources.length; i++) {
IResourceDelta delta = getDelta(resources[i].getProject());
-
- if (delta != null) {
+ if (delta == null) {
+ //project just added to the workspace..no previous build tree
+ return true;
+ } else {
IPath path= resources[i].getProjectRelativePath();
IResourceDelta change= delta.findMember(path);
if (change != null) {
@@ -144,14 +163,14 @@ public final class ExternalToolBuilder extends IncrementalProjectBuilder {
* @return the array of build kinds.
*/
public static int[] buildTypesToArray(String buildTypes) {
+ if (buildTypes == null || buildTypes.length() == 0) {
+ return DEFAULT_BUILD_TYPES;
+ }
+
int count = 0;
boolean incremental = false;
boolean full = false;
boolean auto = false;
-
- if (buildTypes == null || buildTypes.length() == 0) {
- return DEFAULT_BUILD_TYPES;
- }
StringTokenizer tokenizer = new StringTokenizer(buildTypes, BUILD_TYPE_SEPARATOR);
while (tokenizer.hasMoreTokens()) {
@@ -161,14 +180,12 @@ public final class ExternalToolBuilder extends IncrementalProjectBuilder {
incremental = true;
count++;
}
- }
- else if (IExternalToolConstants.BUILD_TYPE_FULL.equals(token)) {
+ } else if (IExternalToolConstants.BUILD_TYPE_FULL.equals(token)) {
if (!full) {
full = true;
count++;
}
- }
- else if (IExternalToolConstants.BUILD_TYPE_AUTO.equals(token)) {
+ } else if (IExternalToolConstants.BUILD_TYPE_AUTO.equals(token)) {
if (!auto) {
auto = true;
count++;

Back to the top