Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Patches to error parsing classes

Folks,

  I got into a situation where I wanted to use the ErrorParserManager
class from org.eclipse.cdt.internal.errorparsers to parse error output
from a preprocessor run.

  Unfortunately, at that point, I was nowhere near an ACBuilder-derived
class to feed to the ErrorParserManager.  Taking a look at the code for
the class, it appears that it uses ACBuilder for two things - to call
getProject() and addMarker().

  The attached patches do the following:

- IMarkerGenerator.patch
  Adds an interface with one member, addMarker(), to the package
  org.eclipse.cdt.core.

- ACBuilder.patch
  Adds "implements IMarkerGenerator" to the ACBuilder declaration.

- CBuilder.patch
  Moves the creation of the ErrorParserManager from the CBuilder
  constructor and into the invokeMake() function so it picks up
  the proper context (current project).

- ErrorParserManager.patch
  Changes the ErrorParserManager class to use an instance of IProject
  and IMarkerGenerator instead of an ACBuilder.  Retains the constructor
  that takes an ACBuilder reference, but simply forwards the call on
  to the (IProject, IMarkerGenerator) constructor.

  I would appreciate if the maintainer of this code could review my
changes incorporate them into the project's repository.

-Samrobb
--- IMarkerGenerator.java.orig	1969-12-31 19:00:00.000000000 -0500
+++ IMarkerGenerator.java	2002-10-01 23:11:37.000000000 -0400
@@ -0,0 +1,10 @@
+package org.eclipse.cdt.core;
+
+import org.eclipse.core.resources.IResource;
+
+/**
+ * @author sam.robb
+ */
+public interface IMarkerGenerator {
+	public void addMarker(IResource file, int lineNumber, String errorDesc, int severity, String errorVar);
+}
--- ACBuilder.java.orig	2002-10-01 23:07:44.000000000 -0400
+++ ACBuilder.java	2002-10-01 23:11:53.000000000 -0400
@@ -7,6 +7,7 @@
 
 
 import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.IMarkerGenerator;
 import org.eclipse.cdt.core.model.ICModelMarker;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.resources.IncrementalProjectBuilder;
@@ -14,7 +15,7 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.resources.IMarker;
 
-public abstract class ACBuilder extends IncrementalProjectBuilder {
+public abstract class ACBuilder extends IncrementalProjectBuilder implements IMarkerGenerator {
 
 	/**
 	 * Constructor for ACBuilder
--- ErrorParserManager.java.orig	2002-10-01 23:08:26.000000000 -0400
+++ ErrorParserManager.java	2002-10-01 23:16:22.000000000 -0400
@@ -17,18 +17,22 @@
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 
 import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.IMarkerGenerator;
 import org.eclipse.cdt.core.resources.ACBuilder;
+
 public class ErrorParserManager {
 	
 	private static String PREF_ERROR_PARSER= "errorOutputParser";
 	
-	private ACBuilder fBuilder;
+	private IProject fProject;
+	private IMarkerGenerator fMarkerGenerator;
 	private Map fFilesInProject;
 	private List fNameConflicts;
 	
@@ -41,12 +45,15 @@
 	
 	static String SEPARATOR = System.getProperty("file.separator");
 
-	
 	public ErrorParserManager(ACBuilder builder) {
-		fBuilder= builder;
+		this(builder.getProject(), builder);
+	}
+	
+	public ErrorParserManager(IProject project, IMarkerGenerator markerGenerator) {
+		fProject= project;
+		fMarkerGenerator= markerGenerator;
 		fFilesInProject= new HashMap();
 		fNameConflicts= new ArrayList();
-		
 		fErrorParsers= new ArrayList();
 		fDirectoryStack = new Vector();
 		fBaseDirectory = null;
@@ -161,8 +168,8 @@
 		fNameConflicts.clear();
 		
 		List collectedFiles= new ArrayList();		
-		fBaseDirectory = fBuilder.getProject().getLocation();
-		collectFiles(fBuilder.getProject(), collectedFiles);		
+		fBaseDirectory = fProject.getLocation();
+		collectFiles(fProject, collectedFiles);		
 		
 		for (int i= 0; i < collectedFiles.size(); i++) {
 			IFile curr= (IFile)collectedFiles.get(i);
@@ -243,7 +250,7 @@
 		} else {
 			path = (IPath)getWorkingDirectory().append(filePath);
 		}	
-		return (IFile)fBuilder.getProject().getFile(path);
+		return (IFile)fProject.getFile(path);
 	}
 
 	/**
@@ -251,9 +258,9 @@
 	 */	
 	public void generateMarker(IResource file, int lineNumber, String desc, int severity, String varName) {
 		if (file == null) {
-			fBuilder.addMarker (fBuilder.getProject(), lineNumber, desc, severity, varName);
+			fMarkerGenerator.addMarker (fProject, lineNumber, desc, severity, varName);
 		} else {
-			fBuilder.addMarker(file, lineNumber, desc, severity, varName);
+			fMarkerGenerator.addMarker(file, lineNumber, desc, severity, varName);
 		}
 	}		
 

Attachment: CBuilder.patch
Description: CBuilder.patch


Back to the top