[
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