[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] a few builder fixes
|
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/ChangeLog,v
retrieving revision 1.11
diff -u -r1.11 ChangeLog
--- ChangeLog 25 Oct 2002 18:38:30 -0000 1.11
+++ ChangeLog 28 Oct 2002 14:02:44 -0000
@@ -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
Index: src/org/eclipse/cdt/core/resources/ACBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ACBuilder.java,v
retrieving revision 1.5
diff -u -r1.5 ACBuilder.java
--- src/org/eclipse/cdt/core/resources/ACBuilder.java 23 Oct 2002 18:19:49 -0000 1.5
+++ src/org/eclipse/cdt/core/resources/ACBuilder.java 28 Oct 2002 14:02:44 -0000
@@ -5,7 +5,6 @@
* 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 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();
}
-
Index: src/org/eclipse/cdt/internal/core/CBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CBuilder.java,v
retrieving revision 1.9
diff -u -r1.9 CBuilder.java
--- src/org/eclipse/cdt/internal/core/CBuilder.java 23 Oct 2002 18:21:26 -0000 1.9
+++ src/org/eclipse/cdt/internal/core/CBuilder.java 28 Oct 2002 14:02:44 -0000
@@ -29,6 +29,7 @@
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 @@
if ( isClean ) {
forgetLastBuiltState();
}
+ checkCancel(monitor);
return getProject().getReferencedProjects();
}
@@ -64,6 +66,7 @@
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 @@
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 @@
fatalBuild = epm.reportProblems();
}
subMonitor.done();
+ monitor.setCanceled(isCanceled);
}
} catch (Exception e) {
CCorePlugin.log(e);
@@ -148,7 +154,15 @@
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();