Ben Konrath 3f0aaa6
Index: batch/org/eclipse/jdt/internal/compiler/batch/Main.java
Ben Konrath 3f0aaa6
===================================================================
Ben Konrath 3f0aaa6
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java,v
Ben Konrath e9c9d5e
retrieving revision 1.254.4.2
Ben Konrath e9c9d5e
diff -u -r1.254.4.2 Main.java
Ben Konrath e9c9d5e
--- batch/org/eclipse/jdt/internal/compiler/batch/Main.java	20 Oct 2006 14:11:48 -0000	1.254.4.2
Ben Konrath e9c9d5e
+++ batch/org/eclipse/jdt/internal/compiler/batch/Main.java	16 Feb 2007 18:40:23 -0000
Ben Konrath e9c9d5e
@@ -2723,6 +2723,10 @@
Ben Konrath 3f0aaa6
 	ArrayList currentRuleSpecs = new ArrayList(defaultSize);
Ben Konrath 3f0aaa6
 	StringTokenizer tokenizer = new StringTokenizer(currentPath,
Ben Konrath 3f0aaa6
 			File.pathSeparator + "[]", true); //$NON-NLS-1$
Ben Konrath 4d13045
+	ArrayList tokens = new ArrayList();
Ben Konrath 4d13045
+	while (tokenizer.hasMoreTokens()) {
Ben Konrath 4d13045
+		tokens.add(tokenizer.nextToken());
Ben Konrath 4d13045
+	}
Ben Konrath 3f0aaa6
 	// state machine
Ben Konrath 4d13045
 	final int start = 0; 
Ben Konrath 4d13045
 	final int readyToClose = 1;
Ben Konrath e9c9d5e
@@ -2737,14 +2741,20 @@
Ben Konrath 4d13045
 	// 'path[' 'path1;path2['
Ben Konrath 4d13045
 	final int rulesReadyToClose = 6;
Ben Konrath 4d13045
 	// 'path[rule' 'path[rule1;rule2'
Ben Konrath 4d13045
+	final int bracketOpened = 7;
Ben Konrath 4d13045
+	// '.*[.*'
Ben Konrath 4d13045
+	final int bracketClosed = 8;
Ben Konrath 4d13045
+	// '.*([.*])+'
Ben Konrath 3f0aaa6
 	final int error = 99;
Ben Konrath 3f0aaa6
 	int state = start;
Ben Konrath 3f0aaa6
 	String token = null;
Ben Konrath e9c9d5e
-	while (tokenizer.hasMoreTokens() && state != error) {
Ben Konrath 3f0aaa6
-		token = tokenizer.nextToken();
Ben Konrath e9c9d5e
+    int cursor = 0, tokensNb = tokens.size(), bracket = -1;
Ben Konrath e9c9d5e
+    while (cursor < tokensNb && state != error) {
Ben Konrath e9c9d5e
+        token = (String) tokens.get(cursor++);
Ben Konrath 3f0aaa6
 		if (token.equals(File.pathSeparator)) {
Ben Konrath 3f0aaa6
 			switch (state) {
Ben Konrath 3f0aaa6
 			case start:
Ben Konrath e9c9d5e
+	        case bracketOpened:
Ben Konrath 3f0aaa6
 				break;
Ben Konrath 4d13045
 			case readyToClose:
Ben Konrath 4d13045
 			case readyToCloseEndingWithRules:
Ben Konrath e9c9d5e
@@ -2757,14 +2767,21 @@
Ben Konrath 4d13045
 			case rulesReadyToClose:
Ben Konrath 3f0aaa6
 				state = rulesNeedAnotherRule;
Ben Konrath 3f0aaa6
 				break;
Ben Konrath 4d13045
+			case bracketClosed:
Ben Konrath 4d13045
+				cursor = bracket + 1;
Ben Konrath 4d13045
+				state = rulesStart;
Ben Konrath 3f0aaa6
+				break;
Ben Konrath 3f0aaa6
 			default:
Ben Konrath 3f0aaa6
 				state = error;
Ben Konrath 3f0aaa6
 			}
Ben Konrath 3f0aaa6
 		} else if (token.equals("[")) { //$NON-NLS-1$
Ben Konrath 3f0aaa6
 			switch (state) {
Ben Konrath 4d13045
 			case readyToClose:
Ben Konrath 3f0aaa6
-				state = rulesStart;
Ben Konrath 4d13045
+				bracket = cursor - 1;
Ben Konrath 4d13045
+			case bracketClosed:
Ben Konrath 4d13045
+				state = bracketOpened;
Ben Konrath 3f0aaa6
 				break;
Ben Konrath 4d13045
+			case bracketOpened:
Ben Konrath 4d13045
 			default:
Ben Konrath 3f0aaa6
 				state = error;
Ben Konrath 3f0aaa6
 			}
Ben Konrath e9c9d5e
@@ -2773,6 +2790,10 @@
Ben Konrath 4d13045
 			case rulesReadyToClose:
Ben Konrath 4d13045
 				state = readyToCloseEndingWithRules;
Ben Konrath 3f0aaa6
 				break;
Ben Konrath 4d13045
+			case bracketOpened:
Ben Konrath 4d13045
+				state = bracketClosed;
Ben Konrath 3f0aaa6
+				break;
Ben Konrath 4d13045
+			case bracketClosed:
Ben Konrath 4d13045
 			default:
Ben Konrath 3f0aaa6
 				state = error;
Ben Konrath 3f0aaa6
 			}
Ben Konrath e9c9d5e
@@ -2789,10 +2810,22 @@
Ben Konrath 4d13045
 				state = rulesReadyToClose;
Ben Konrath 3f0aaa6
 				currentRuleSpecs.add(token);
Ben Konrath 3f0aaa6
 				break;
Ben Konrath e9c9d5e
+            case bracketClosed:
Ben Konrath e9c9d5e
+                for (int i = bracket; i < cursor ; i++) {
Ben Konrath e9c9d5e
+                	currentClasspathName += (String) tokens.get(i);
Ben Konrath e9c9d5e
+                }
Ben Konrath e9c9d5e
+			    state = readyToClose;
Ben Konrath e9c9d5e
+			    break;
Ben Konrath 4d13045
+			case bracketOpened:
Ben Konrath e9c9d5e
+			    break;
Ben Konrath 3f0aaa6
 			default:
Ben Konrath 3f0aaa6
 				state = error;
Ben Konrath 3f0aaa6
 			}
Ben Konrath 3f0aaa6
 		}
Ben Konrath 4d13045
+		if (state == bracketClosed && cursor == tokensNb) {
Ben Konrath 4d13045
+			cursor = bracket + 1;
Ben Konrath 4d13045
+			state = rulesStart;
Ben Konrath 4d13045
+		}
Ben Konrath 3f0aaa6
 	}
Ben Konrath 3f0aaa6
 	switch(state) {
Ben Konrath e9c9d5e
 		case readyToClose:
Ben Konrath e9c9d5e
@@ -2801,6 +2834,8 @@
Ben Konrath e9c9d5e
 			addNewEntry(paths, currentClasspathName, currentRuleSpecs, 
Ben Konrath e9c9d5e
 				customEncoding, isSourceOnly);
Ben Konrath 3f0aaa6
 			break;
Ben Konrath e9c9d5e
+        case bracketOpened:
Ben Konrath e9c9d5e
+        case bracketClosed:
Ben Konrath 3f0aaa6
 		default :
Ben Konrath 4d13045
 			// we go on anyway
Ben Konrath 3f0aaa6
 			this.logger.logIncorrectClasspath(currentPath);