diff --git a/eclipse-ecj-square-bracket-classpath.patch b/eclipse-ecj-square-bracket-classpath.patch index 97a2cf3..0f89c47 100644 --- a/eclipse-ecj-square-bracket-classpath.patch +++ b/eclipse-ecj-square-bracket-classpath.patch @@ -4,186 +4,105 @@ RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/c 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 19 Jan 2007 19:22:57 -0000 -@@ -28,9 +28,11 @@ - import java.text.MessageFormat; - import java.util.ArrayList; - import java.util.Arrays; -+import java.util.Collections; - import java.util.Date; - import java.util.HashMap; - import java.util.Iterator; -+import java.util.LinkedList; - import java.util.Locale; - import java.util.Map; - import java.util.MissingResourceException; -@@ -40,8 +42,8 @@ - - import org.eclipse.jdt.core.compiler.CategorizedProblem; - import org.eclipse.jdt.core.compiler.CharOperation; --import org.eclipse.jdt.core.compiler.InvalidInputException; - import org.eclipse.jdt.core.compiler.IProblem; -+import org.eclipse.jdt.core.compiler.InvalidInputException; - import org.eclipse.jdt.internal.compiler.ClassFile; - import org.eclipse.jdt.internal.compiler.CompilationResult; - import org.eclipse.jdt.internal.compiler.Compiler; -@@ -59,9 +61,9 @@ - import org.eclipse.jdt.internal.compiler.problem.DefaultProblem; - import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory; - import org.eclipse.jdt.internal.compiler.problem.ProblemSeverities; -+import org.eclipse.jdt.internal.compiler.util.HashtableOfObject; - import org.eclipse.jdt.internal.compiler.util.Messages; - import org.eclipse.jdt.internal.compiler.util.SuffixConstants; --import org.eclipse.jdt.internal.compiler.util.HashtableOfObject; - import org.eclipse.jdt.internal.compiler.util.Util; - - public class Main implements ProblemSeverities, SuffixConstants { -@@ -2989,56 +2991,74 @@ ++++ 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$ -+ LinkedList list = new LinkedList(Collections.list(tokenizer)); -+ ++ ArrayList tokens = new ArrayList(); ++ while (tokenizer.hasMoreTokens()) { ++ tokens.add(tokenizer.nextToken()); ++ } // state machine -- final int start = 0; -- final int readyToClose = 1; -- // 'path' 'path1[rule];path2' -- final int readyToCloseEndingWithRules = 2; -- // 'path[rule]' 'path1;path2[rule]' -- final int readyToCloseOrOtherEntry = 3; -- // 'path[rule];' 'path;' 'path1;path2;' -- final int rulesNeedAnotherRule = 4; -- // 'path[rule1;' -- final int rulesStart = 5; -- // 'path[' 'path1;path2[' -- final int rulesReadyToClose = 6; -- // 'path[rule' 'path[rule1;rule2' -+ // process list in reverse order, start refers to end of list -+ final int start = 0; -+ final int rulesStart = 1; -+ // ']' '];path' -+ final int rulesReadyToCloseOrOtherRule = 2; -+ // 'rule]' 'rule1;rule2]' -+ final int rulesNeedAnotherRule = 3; -+ // ';rule2]' ';rule2;rule3];path' -+ final int readyForPath = 4; -+ // '[rule]' '[rule1;rule2]' -+ final int readyToCloseOrOtherEntry = 5; -+ // 'path[rule]' 'path' 'path1;path2' -+ final int readyForPathOrRules = 6; -+ // ';path[rule]' ';path' + 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(); -+ while (!list.isEmpty()) { -+ token = (String)list.removeLast(); ++ 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: - case readyToCloseOrOtherEntry: -- state = readyToCloseOrOtherEntry; -+ Collections.reverse(currentRuleSpecs); - addNewEntry(paths, currentClasspathName, currentRuleSpecs, customEncoding, isSourceOnly); - currentRuleSpecs.clear(); -+ state = readyForPathOrRules; - break; -- case rulesReadyToClose: -+ case rulesReadyToCloseOrOtherRule: + case readyToClose: + case readyToCloseEndingWithRules: +@@ -3022,14 +3033,21 @@ + case rulesReadyToClose: state = rulesNeedAnotherRule; break; -+ case rulesNeedAnotherRule: -+ break; -+ case readyForPathOrRules: ++ case bracketClosed: ++ cursor = bracket + 1; ++ state = rulesStart; + break; default: state = error; } } else if (token.equals("[")) { //$NON-NLS-1$ switch (state) { -- case readyToClose: + case readyToClose: - state = rulesStart; -+ case start: -+ case readyForPath: -+ case readyForPathOrRules: -+ currentClasspathName = getPath(list, token); -+ state = readyToCloseOrOtherEntry; ++ bracket = cursor - 1; ++ case bracketClosed: ++ state = bracketOpened; break; -- default: -+ case rulesReadyToCloseOrOtherRule: -+ state = readyForPath; -+ break; -+ default: ++ case bracketOpened: + default: state = error; } - } else if (token.equals("]")) { //$NON-NLS-1$ - switch (state) { -- case rulesReadyToClose: -- state = readyToCloseEndingWithRules; -+ case start: -+ case readyForPathOrRules: -+ state = rulesStart; +@@ -3038,6 +3056,10 @@ + case rulesReadyToClose: + state = readyToCloseEndingWithRules; break; -- default: -+ case readyForPath: -+ currentClasspathName = getPath(list, token); -+ state = readyToCloseOrOtherEntry; ++ case bracketOpened: ++ state = bracketClosed; + break; -+ default: ++ case bracketClosed: + default: state = error; } - -@@ -3046,24 +3066,26 @@ - // regular word - switch (state) { - case start: -- case readyToCloseOrOtherEntry: -- state = readyToClose; -- currentClasspathName = token; -+ case readyForPath: -+ case readyForPathOrRules: -+ currentClasspathName = getPath(list, token); -+ state = readyToCloseOrOtherEntry; - break; -- case rulesNeedAnotherRule: - case rulesStart: -- state = rulesReadyToClose; -+ case rulesNeedAnotherRule: +@@ -3055,10 +3077,22 @@ + state = rulesReadyToClose; currentRuleSpecs.add(token); -+ state = rulesReadyToCloseOrOtherRule; 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 : -- case readyToCloseEndingWithRules : -- case readyToCloseOrOtherEntry : -+ case readyForPathOrRules: -+ case readyToCloseOrOtherEntry: -+ Collections.reverse(currentRuleSpecs); + case readyToClose : +@@ -3066,6 +3100,8 @@ + case readyToCloseOrOtherEntry : addNewEntry(paths, currentClasspathName, currentRuleSpecs, customEncoding, isSourceOnly); break; ++ case bracketOpened: ++ case bracketClosed: default : -@@ -3071,4 +3093,13 @@ + // we go on anyway this.logger.logIncorrectClasspath(currentPath); - } - } -+ -+private String getPath(LinkedList list, String path) { -+ while (!list.isEmpty()) { -+ if (File.pathSeparator.equalsIgnoreCase((String)list.getLast())) -+ break; -+ path = (String)list.removeLast() + path; -+ } -+ return path; -+} - } diff --git a/eclipse.spec b/eclipse.spec index 83df5cf..52c6d2c 100644 --- a/eclipse.spec +++ b/eclipse.spec @@ -1738,9 +1738,10 @@ fi %{_libdir}/%{name}/plugins/org.eclipse.sdk_* %changelog -* Wed Jan 31 2007 Ben Konrath 3.2.1-35 +* Thu Fed 01 2007 Ben Konrath 3.2.1-35 - Use original name for the SWT symlinks. - Rework ppc64, s390{x} and sparc{64} hack to fix multilib problem. +- Update ecj [] patch to upstream version from 3.3. * Tue Jan 30 2007 Ben Konrath 3.2.1-34 - Create symlinks to the SWT JNI libs in %%{_libdir}/eclipse with sane