Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorDavid Inglis2002-10-28 14:05:29 +0000
committerDavid Inglis2002-10-28 14:05:29 +0000
commitd6eb399569f457881b2893fbd210a3fceefbd270 (patch)
tree51a23334531322415cae66f52b76c3ccf3fff509 /core
parent113211c2e4a895013a26c9b184e80d38368ea164 (diff)
downloadorg.eclipse.cdt-d6eb399569f457881b2893fbd210a3fceefbd270.tar.gz
org.eclipse.cdt-d6eb399569f457881b2893fbd210a3fceefbd270.tar.xz
org.eclipse.cdt-d6eb399569f457881b2893fbd210a3fceefbd270.zip
builder fixes
Diffstat (limited to 'core')
-rw-r--r--core/org.eclipse.cdt.core/ChangeLog7
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ACBuilder.java42
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CBuilder.java16
3 files changed, 50 insertions, 15 deletions
diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog
index 6daf62afc63..43c8a98805d 100644
--- a/core/org.eclipse.cdt.core/ChangeLog
+++ b/core/org.eclipse.cdt.core/ChangeLog
@@ -1,3 +1,10 @@
+2002-10-28 David Inglis
+
+ * src/.../core/resources/ACBuilder.java
+ Added check for duplicate markers.
+ * src/.../internal/core/CBuilder.java
+ Added check for canceled build and throws OperationCanceledException exception
+
2002-10-25 Alain Magloire
The debugger needs to know the endian of a binary. For example
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ACBuilder.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ACBuilder.java
index 3f4a0370696..9a05e4dfe9c 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ACBuilder.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ACBuilder.java
@@ -5,7 +5,6 @@ package org.eclipse.cdt.core.resources;
* All Rights Reserved.
*/
-
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.IMarkerGenerator;
import org.eclipse.cdt.core.model.ICModelMarker;
@@ -23,42 +22,57 @@ public abstract class ACBuilder extends IncrementalProjectBuilder implements IMa
public ACBuilder() {
super();
}
-
+
/*
* callback from Output Parser
*/
//public void addMarker(IFile file, int lineNumber, String errorDesc, int severity) {
public void addMarker(IResource file, int lineNumber, String errorDesc, int severity, String errorVar) {
+
try {
- IMarker marker= file.createMarker(ICModelMarker.C_MODEL_PROBLEM_MARKER);
+ IMarker[] cur = file.findMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, false, IResource.DEPTH_ONE);
+ /*
+ * Try to find matching markers and don't put in duplicates
+ */
+ if ((cur != null) && (cur.length > 0)) {
+ for (int i = 0; i < cur.length; i++) {
+ if ((((Integer) cur[i].getAttribute(IMarker.LOCATION)).intValue() == lineNumber)
+ && (((Integer) cur[i].getAttribute(IMarker.SEVERITY)).intValue() == severity)
+ && (((String) cur[i].getAttribute(IMarker.MESSAGE)).equals(errorDesc))) {
+ return;
+ }
+ }
+ }
+
+ IMarker marker = file.createMarker(ICModelMarker.C_MODEL_PROBLEM_MARKER);
marker.setAttribute(IMarker.LOCATION, lineNumber);
marker.setAttribute(IMarker.MESSAGE, errorDesc);
marker.setAttribute(IMarker.SEVERITY, mapMarkerSeverity(severity));
marker.setAttribute(IMarker.LINE_NUMBER, lineNumber);
marker.setAttribute(IMarker.CHAR_START, -1);
marker.setAttribute(IMarker.CHAR_END, -1);
- if(errorVar != null) {
+ if (errorVar != null) {
marker.setAttribute(ICModelMarker.C_MODEL_MARKER_VARIABLE, errorVar);
}
- } catch (CoreException e) {
+ }
+ catch (CoreException e) {
CCorePlugin.log(e.getStatus());
}
-
+
}
-
- int mapMarkerSeverity (int severity) {
+
+ int mapMarkerSeverity(int severity) {
switch (severity) {
- case SEVERITY_ERROR_BUILD:
- case SEVERITY_ERROR_RESOURCE:
+ case SEVERITY_ERROR_BUILD :
+ case SEVERITY_ERROR_RESOURCE :
return IMarker.SEVERITY_ERROR;
- case SEVERITY_INFO:
+ case SEVERITY_INFO :
return IMarker.SEVERITY_INFO;
- case SEVERITY_WARNING:
+ case SEVERITY_WARNING :
return IMarker.SEVERITY_WARNING;
}
return IMarker.SEVERITY_ERROR;
}
- public abstract IPath getWorkingDirectory();
+ public abstract IPath getWorkingDirectory();
}
-
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CBuilder.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CBuilder.java
index 98e85be64bd..98ab7fb6ade 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CBuilder.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CBuilder.java
@@ -29,6 +29,7 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.SubProgressMonitor;
@@ -57,6 +58,7 @@ public class CBuilder extends ACBuilder {
if ( isClean ) {
forgetLastBuiltState();
}
+ checkCancel(monitor);
return getProject().getReferencedProjects();
}
@@ -64,6 +66,7 @@ public class CBuilder extends ACBuilder {
private boolean invokeMake(boolean fullBuild, IProgressMonitor monitor) {
boolean isClean = false;
boolean fatalBuild = false;
+ boolean isCanceled = false;
IProject currProject= getProject();
SubProgressMonitor subMonitor = null;
@@ -117,6 +120,8 @@ public class CBuilder extends ACBuilder {
launcher.execute(makepath, userArgs, env, workingDirectory);
if (launcher.waitAndRead(epm.getOutputStream(), epm.getOutputStream(), subMonitor) != CommandLauncher.OK)
errMsg = launcher.getErrorMessage();
+
+ isCanceled = monitor.isCanceled();
monitor.setCanceled(false);
subMonitor = new SubProgressMonitor(monitor, IProgressMonitor.UNKNOWN);
subMonitor.subTask("Refresh From Local");
@@ -141,6 +146,7 @@ public class CBuilder extends ACBuilder {
fatalBuild = epm.reportProblems();
}
subMonitor.done();
+ monitor.setCanceled(isCanceled);
}
} catch (Exception e) {
CCorePlugin.log(e);
@@ -148,7 +154,15 @@ public class CBuilder extends ACBuilder {
monitor.done();
return (isClean || fatalBuild);
}
-
+
+ /**
+ * Check whether the build has been canceled.
+ */
+ public void checkCancel(IProgressMonitor monitor) {
+ if (monitor != null && monitor.isCanceled())
+ throw new OperationCanceledException();
+ }
+
private String[] parseArguments(boolean fullBuild, String override_args) {
ArrayList list= new ArrayList();
IProject currProject = getProject();

Back to the top