eclipse/eclipse-ecj-square-bracket-classpath.patch

109 lines
3.0 KiB
Diff
Raw Normal View History

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);