Index: batch/org/eclipse/jdt/internal/compiler/batch/Main.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java,v retrieving revision 1.254.4.1 diff -u -r1.254.4.1 Main.java --- batch/org/eclipse/jdt/internal/compiler/batch/Main.java 2 Jul 2006 10:11:58 -0000 1.254.4.1 +++ batch/org/eclipse/jdt/internal/compiler/batch/Main.java 1 Feb 2007 21:04:52 -0000 @@ -2989,6 +2989,10 @@ ArrayList currentRuleSpecs = new ArrayList(defaultSize); StringTokenizer tokenizer = new StringTokenizer(currentPath, File.pathSeparator + "[]", true); //$NON-NLS-1$ + ArrayList tokens = new ArrayList(); + while (tokenizer.hasMoreTokens()) { + tokens.add(tokenizer.nextToken()); + } // state machine final int start = 0; final int readyToClose = 1; @@ -3003,14 +3007,21 @@ // 'path[' 'path1;path2[' final int rulesReadyToClose = 6; // 'path[rule' 'path[rule1;rule2' + final int bracketOpened = 7; + // '.*[.*' + final int bracketClosed = 8; + // '.*([.*])+' + final int error = 99; int state = start; String token = null; - while (tokenizer.hasMoreTokens()) { - token = tokenizer.nextToken(); + int cursor = 0, tokensNb = tokens.size(), bracket = -1; + while (cursor < tokensNb && state != error) { + token = (String) tokens.get(cursor++); if (token.equals(File.pathSeparator)) { switch (state) { case start: + case bracketOpened: break; case readyToClose: case readyToCloseEndingWithRules: @@ -3022,14 +3033,21 @@ case rulesReadyToClose: state = rulesNeedAnotherRule; break; + case bracketClosed: + cursor = bracket + 1; + state = rulesStart; + break; default: state = error; } } else if (token.equals("[")) { //$NON-NLS-1$ switch (state) { case readyToClose: - state = rulesStart; + bracket = cursor - 1; + case bracketClosed: + state = bracketOpened; break; + case bracketOpened: default: state = error; } @@ -3038,6 +3056,10 @@ case rulesReadyToClose: state = readyToCloseEndingWithRules; break; + case bracketOpened: + state = bracketClosed; + break; + case bracketClosed: default: state = error; } @@ -3055,10 +3077,22 @@ state = rulesReadyToClose; currentRuleSpecs.add(token); break; + case bracketClosed: + for (int i = bracket; i < cursor ; i++) { + currentClasspathName += (String) tokens.get(i); + } + state = readyToClose; + break; + case bracketOpened: + break; default: state = error; } } + if (state == bracketClosed && cursor == tokensNb) { + cursor = bracket + 1; + state = rulesStart; + } } switch(state) { case readyToClose : @@ -3066,6 +3100,8 @@ case readyToCloseOrOtherEntry : addNewEntry(paths, currentClasspathName, currentRuleSpecs, customEncoding, isSourceOnly); break; + case bracketOpened: + case bracketClosed: default : // we go on anyway this.logger.logIncorrectClasspath(currentPath);