Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] MakeErrorParser.java Fixes.

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/ChangeLog,v
retrieving revision 1.52
diff -u -r1.52 ChangeLog
--- ChangeLog	19 Dec 2002 20:50:25 -0000	1.52
+++ ChangeLog	20 Dec 2002 21:10:19 -0000
@@ -1,3 +1,19 @@
+2002-12-20 Alain Magloire
+
+	Bug fix, We use a feature of GNU make to help track the directories
+		Entering Directory '...'
+		Leaving Directory '...'
+	It looks like sometimes we loose track, or GNU make does not show
+	a "Leaving Directory" this may actually depend on how it was spawn,
+	you can suppress the message.  If you loose track we popDirectories()
+	and try to recover.
+
+	* src/org/eclipse/cdt/core/ErrorParserManager.java (popDirectory):
+	Is throwing NoSuchElement, check the size of the stack first.
+
+	* src/org/eclipse/cdt/internal/errorparsers/MakeErrorParser.java (processLine):
+	Recover when loosing track.
+
 2002-12-19 Alain Magloire
 
 	* model/org/eclipse/cdt/internal/core/model/parser/BinaryContainerAdapter.java (getFile):
Index: src/org/eclipse/cdt/core/ErrorParserManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ErrorParserManager.java,v
retrieving revision 1.8
diff -u -r1.8 ErrorParserManager.java
--- src/org/eclipse/cdt/core/ErrorParserManager.java	19 Dec 2002 19:20:18 -0000	1.8
+++ src/org/eclipse/cdt/core/ErrorParserManager.java	20 Dec 2002 21:10:19 -0000
@@ -90,7 +90,7 @@
 		}
 		// Fallback to the Project Location
 		// FIXME: if the build did not start in the Project ?
-		return fProject.getLocation();
+		return fBaseDirectory;
 	}
 
 	public void pushDirectory(IPath dir) {
@@ -99,8 +99,7 @@
 			if (fBaseDirectory.isPrefixOf(dir)) {
 				int segments = fBaseDirectory.matchingFirstSegments(dir);
 				pwd = dir.removeFirstSegments(segments);
-			}
-			else {
+			} else {
 				pwd = dir;
 			}
 			fDirectoryStack.addElement(pwd);
@@ -109,11 +108,12 @@
 
 	public IPath popDirectory() {
 		int i = fDirectoryStack.size();
-		IPath dir = (IPath) fDirectoryStack.lastElement();
-		if (i != 0) {
+		if (i != 0) {			
+			IPath dir = (IPath) fDirectoryStack.lastElement();
 			fDirectoryStack.removeElementAt(i - 1);
+			return dir;
 		}
-		return dir;
+		return new Path("");
 	}
 
 	public int getDirectoryLevel() {
Index: src/org/eclipse/cdt/internal/errorparsers/MakeErrorParser.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/errorparsers/MakeErrorParser.java,v
retrieving revision 1.4
diff -u -r1.4 MakeErrorParser.java
--- src/org/eclipse/cdt/internal/errorparsers/MakeErrorParser.java	7 Nov 2002 03:20:00 -0000	1.4
+++ src/org/eclipse/cdt/internal/errorparsers/MakeErrorParser.java	20 Dec 2002 21:10:19 -0000
@@ -45,11 +45,9 @@
 			    		 */
 			    		int level = getDirectoryLevel(line);
 			    		int parseLevel = eoParser.getDirectoryLevel();
-			    		if (level <= parseLevel) {
-			    			for ( ; level <= parseLevel; level++) {
-			    				eoParser.popDirectory();
-			    			}
-			    		}
+		    			for (; level < parseLevel; level++) {
+		    				eoParser.popDirectory();
+		    			}
 			    		eoParser.pushDirectory(new Path(dir));
 			    	} else {
 			    		eoParser.popDirectory();



Back to the top