### Eclipse Workspace Patch 1.0
#P org.eclipse.jdt.core
Index: batch/org/eclipse/jdt/internal/compiler/batch/ClasspathJar.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/ClasspathJar.java,v
retrieving revision 1.45.2.1
diff -u -r1.45.2.1 ClasspathJar.java
--- batch/org/eclipse/jdt/internal/compiler/batch/ClasspathJar.java 10 Nov 2008 17:46:09 -0000 1.45.2.1
+++ batch/org/eclipse/jdt/internal/compiler/batch/ClasspathJar.java 4 Mar 2009 16:09:54 -0000
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2009 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
+ * Fabrice Matrat - fix for 265103
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.batch;
@@ -54,18 +55,20 @@
READING_JAR = 4,
CONTINUING = 5,
SKIP_LINE = 6;
- private static final char[] CLASSPATH_HEADER_TOKEN =
+ private static final char[] CLASSPATH_HEADER_TOKEN =
"Class-Path:".toCharArray(); //$NON-NLS-1$
- private int ClasspathSectionsCount;
+ private int classpathSectionsCount;
private ArrayList calledFilesNames;
public boolean analyzeManifestContents(Reader reader) throws IOException {
int state = START, substate = 0;
StringBuffer currentJarToken = new StringBuffer();
int currentChar;
- this.ClasspathSectionsCount = 0;
+ this.classpathSectionsCount = 0;
this.calledFilesNames = null;
for (;;) {
currentChar = reader.read();
+ if (currentChar == '\r') // skip \r, will consider \n later (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=251079 )
+ currentChar = reader.read();
switch (state) {
case START:
if (currentChar == -1) {
@@ -91,50 +94,71 @@
case PAST_CLASSPATH_HEADER:
if (currentChar == ' ') {
state = SKIPPING_WHITESPACE;
- this.ClasspathSectionsCount++;
+ this.classpathSectionsCount++;
} else {
return false;
}
break;
case SKIPPING_WHITESPACE:
if (currentChar == -1) {
+ // >>>>>>>>>>>>>>>>>> Add the latest jar read
+ addCurrentTokenJarWhenNecessary(currentJarToken);
return true;
} else if (currentChar == '\n') {
state = CONTINUING;
} else if (currentChar != ' ') {
currentJarToken.append((char) currentChar);
state = READING_JAR;
+ } else {
+ // >>>>>>>>>>>>>>>>>> Add the latest jar read
+ addCurrentTokenJarWhenNecessary(currentJarToken);
}
break;
case CONTINUING:
if (currentChar == -1) {
+ // >>>>>>>>>>>>>>>>>> Add the latest jar read
+ addCurrentTokenJarWhenNecessary(currentJarToken);
return true;
} else if (currentChar == '\n') {
+ addCurrentTokenJarWhenNecessary(currentJarToken);
state = START;
} else if (currentChar == ' ') {
state = SKIPPING_WHITESPACE;
} else if (currentChar == CLASSPATH_HEADER_TOKEN[0]) {
+ addCurrentTokenJarWhenNecessary(currentJarToken);
state = IN_CLASSPATH_HEADER;
substate = 1;
} else if (this.calledFilesNames == null) {
- return false;
+ // >>>>>>>>>>>>>>>>>> Add the latest jar read
+ addCurrentTokenJarWhenNecessary(currentJarToken);
+ state = START;
} else {
+ // >>>>>>>>>>>>>>>>>> Add the latest jar read
+ addCurrentTokenJarWhenNecessary(currentJarToken);
state = SKIP_LINE;
}
break;
case SKIP_LINE:
if (currentChar == -1) {
+ if (this.classpathSectionsCount != 0) {
+ if (this.calledFilesNames == null) {
+ return false;
+ }
+ }
return true;
} else if (currentChar == '\n') {
state = START;
}
break;
- case READING_JAR:
+ case READING_JAR:
if (currentChar == -1) {
+ // >>>>>>>>>>>>>>>>>> Add the latest jar read
return false;
} else if (currentChar == '\n') {
// appends token below
state = CONTINUING;
+ // >>>>>>>>>>> Add a break to not add the jar yet as it can continue on the next line
+ break;
} else if (currentChar == ' ') {
// appends token below
state = SKIPPING_WHITESPACE;
@@ -142,17 +166,29 @@
currentJarToken.append((char) currentChar);
break;
}
- if (this.calledFilesNames == null) {
- this.calledFilesNames = new ArrayList();
- }
- this.calledFilesNames.add(currentJarToken.toString());
- currentJarToken.setLength(0);
+ addCurrentTokenJarWhenNecessary(currentJarToken);
break;
}
- }
+ }
+ }
+
+ // >>>>>>>>>>>>>>>> Method Extracted from analyzeManifestContents in the READING_JAR Block
+ private boolean addCurrentTokenJarWhenNecessary(StringBuffer currentJarToken) {
+ if (currentJarToken != null && currentJarToken.length() > 0) {
+ if (this.calledFilesNames == null) {
+ this.calledFilesNames = new ArrayList();
+ }
+ this.calledFilesNames.add(currentJarToken.toString());
+ currentJarToken.setLength(0);
+ return true;
+ }
+ return false;
}
+ // <<<<<<<<<<<<<<<<<<<<<<
+
+
public int getClasspathSectionsCount() {
- return this.ClasspathSectionsCount;
+ return this.classpathSectionsCount;
}
public List getCalledFileNames() {
return this.calledFilesNames;