eclipse/eclipse-ecj-square-bracket-...

108 lines
3.1 KiB
Diff

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.2
diff -u -r1.254.4.2 Main.java
--- batch/org/eclipse/jdt/internal/compiler/batch/Main.java 20 Oct 2006 14:11:48 -0000 1.254.4.2
+++ batch/org/eclipse/jdt/internal/compiler/batch/Main.java 16 Feb 2007 18:40:23 -0000
@@ -2723,6 +2723,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;
@@ -2737,14 +2741,20 @@
// '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() && state != error) {
- 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:
@@ -2757,14 +2767,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;
}
@@ -2773,6 +2790,10 @@
case rulesReadyToClose:
state = readyToCloseEndingWithRules;
break;
+ case bracketOpened:
+ state = bracketClosed;
+ break;
+ case bracketClosed:
default:
state = error;
}
@@ -2789,10 +2810,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:
@@ -2801,6 +2834,8 @@
addNewEntry(paths, currentClasspathName, currentRuleSpecs,
customEncoding, isSourceOnly);
break;
+ case bracketOpened:
+ case bracketClosed:
default :
// we go on anyway
this.logger.logIncorrectClasspath(currentPath);