Skip to main content

[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();



Back to the top