Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 127487 Details for
Bug 265103
Manifest Class-Path is not read correctly with ECJ
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed fix
patch_265103_HEAD.txt (text/plain), 15.20 KB, created by
Olivier Thomann
on 2009-03-04 10:54:26 EST
(
hide
)
Description:
Proposed fix
Filename:
MIME Type:
Creator:
Olivier Thomann
Created:
2009-03-04 10:54:26 EST
Size:
15.20 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: compiler/org/eclipse/jdt/internal/compiler/util/ManifestAnalyzer.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/util/ManifestAnalyzer.java,v >retrieving revision 1.2 >diff -u -r1.2 ManifestAnalyzer.java >--- compiler/org/eclipse/jdt/internal/compiler/util/ManifestAnalyzer.java 17 Oct 2008 11:01:09 -0000 1.2 >+++ compiler/org/eclipse/jdt/internal/compiler/util/ManifestAnalyzer.java 4 Mar 2009 15:52:24 -0000 >@@ -26,13 +26,13 @@ > SKIP_LINE = 6; > 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(); >@@ -63,39 +63,57 @@ > 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; >@@ -103,10 +121,13 @@ > break; > 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; >@@ -114,17 +135,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; >#P org.eclipse.jdt.core.tests.compiler >Index: src/org/eclipse/jdt/core/tests/compiler/regression/TestAll.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TestAll.java,v >retrieving revision 1.76 >diff -u -r1.76 TestAll.java >--- src/org/eclipse/jdt/core/tests/compiler/regression/TestAll.java 1 Dec 2008 12:32:11 -0000 1.76 >+++ src/org/eclipse/jdt/core/tests/compiler/regression/TestAll.java 4 Mar 2009 15:52:25 -0000 >@@ -70,6 +70,7 @@ > standardTests.add(SerialVersionUIDTests.class); > standardTests.add(LineNumberAttributeTest.class); > standardTests.add(ProgrammingProblemsTest.class); >+ standardTests.add(ManifestAnalyzerTest.class); > > // add all javadoc tests > for (int i=0, l=JavadocTest.ALL_CLASSES.size(); i<l; i++) { >Index: src/org/eclipse/jdt/core/tests/compiler/regression/ManifestAnalyzerTest.java >=================================================================== >RCS file: src/org/eclipse/jdt/core/tests/compiler/regression/ManifestAnalyzerTest.java >diff -N src/org/eclipse/jdt/core/tests/compiler/regression/ManifestAnalyzerTest.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jdt/core/tests/compiler/regression/ManifestAnalyzerTest.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,155 @@ >+/******************************************************************************* >+ * Copyright (c) 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 >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Fabrice Matrat - initial contribution >+ * IBM Corporation - code review and integration >+ *******************************************************************************/ >+package org.eclipse.jdt.core.tests.compiler.regression; >+import java.io.IOException; >+import java.io.StringReader; >+import java.util.List; >+ >+import org.eclipse.jdt.internal.compiler.util.ManifestAnalyzer; >+ >+public class ManifestAnalyzerTest extends AbstractRegressionTest { >+ >+ private static final String FIRST_JAR = "firstJar.jar"; >+ private static final String SECOND_JAR = "secondJar.jar"; >+ private static final String WHITESPACE = " "; >+ >+ ManifestAnalyzer manifestAnalyzer = new ManifestAnalyzer(); >+ >+ public ManifestAnalyzerTest(String name) { >+ super(name); >+ } >+ public void testWithOneJar() throws IOException { >+ String testWithOneJar = "Manifest-Version: 1.0\nAnt-Version: Apache Ant 1.6.5\nCreated-By: 1.5.0_14-b03 (Sun Microsystems Inc.)\nClass-Path: " + FIRST_JAR + "\nBuild-Reference: Version toto"; >+ StringReader reader = new StringReader(testWithOneJar); >+ this.manifestAnalyzer.analyzeManifestContents(reader); >+ List jars = this.manifestAnalyzer.getCalledFileNames(); >+ assertEquals("Wrong size", 1, jars.size()); >+ assertEquals(FIRST_JAR, jars.get(0)); >+ } >+ >+ public void testWithOneJarWithWiteSpace() throws IOException { >+ String testWithOneJarWithWiteSpace = "Manifest-Version: 1.0\nAnt-Version: Apache Ant 1.6.5\nCreated-By: 1.5.0_14-b03 (Sun Microsystems Inc.)\nClass-Path: " + FIRST_JAR + WHITESPACE + "\nBuild-Reference: Version toto"; >+ StringReader reader = new StringReader(testWithOneJarWithWiteSpace); >+ this.manifestAnalyzer.analyzeManifestContents(reader); >+ List jars = this.manifestAnalyzer.getCalledFileNames(); >+ assertEquals("Wrong size", 1, jars.size()); >+ assertEquals(FIRST_JAR, jars.get(0)); >+ } >+ >+ public void testWithSecondJarOnNextLine() throws IOException { >+ String testWithSecondJarOnNextLine = "Manifest-Version: 1.0\nAnt-Version: Apache Ant 1.6.5\nCreated-By: 1.5.0_14-b03 (Sun Microsystems Inc.)\nClass-Path: " + FIRST_JAR + "\n"+ WHITESPACE + WHITESPACE +"secondJar.jar\nBuild-Reference: Version toto"; >+ StringReader reader = new StringReader(testWithSecondJarOnNextLine); >+ this.manifestAnalyzer.analyzeManifestContents(reader); >+ List jars = this.manifestAnalyzer.getCalledFileNames(); >+ assertEquals("Wrong size", 2, jars.size()); >+ assertEquals(FIRST_JAR, jars.get(0)); >+ assertEquals(SECOND_JAR, jars.get(1)); >+ } >+ >+ public void testWithSecondJarOnTwoLine() throws IOException { >+ String testWithSecondJarOnTwoLine = "Manifest-Version: 1.0\nAnt-Version: Apache Ant 1.6.5\nCreated-By: 1.5.0_14-b03 (Sun Microsystems Inc.)\nClass-Path: " + FIRST_JAR + WHITESPACE + "second\n" + WHITESPACE + "Jar.jar\nBuild-Reference: Version toto"; >+ StringReader reader = new StringReader(testWithSecondJarOnTwoLine); >+ this.manifestAnalyzer.analyzeManifestContents(reader); >+ List jars = this.manifestAnalyzer.getCalledFileNames(); >+ assertEquals("Wrong size", 2, jars.size()); >+ assertEquals(FIRST_JAR, jars.get(0)); >+ assertEquals(SECOND_JAR, jars.get(1)); >+ } >+ >+ public void testWithSecondJarOnTwoLine2() throws IOException { >+ String testWithSecondJarOnTwoLine = "Manifest-Version: 1.0\nAnt-Version: Apache Ant 1.6.5\nCreated-By: 1.5.0_14-b03 (Sun Microsystems Inc.)\nClass-Path: " + FIRST_JAR + WHITESPACE + "second\n" + WHITESPACE + WHITESPACE + "Jar.jar\nBuild-Reference: Version toto"; >+ StringReader reader = new StringReader(testWithSecondJarOnTwoLine); >+ this.manifestAnalyzer.analyzeManifestContents(reader); >+ List jars = this.manifestAnalyzer.getCalledFileNames(); >+ assertEquals("Wrong size", 3, jars.size()); >+ assertEquals(FIRST_JAR, jars.get(0)); >+ assertEquals("second", jars.get(1)); >+ assertEquals("Jar.jar", jars.get(2)); >+ } >+ >+ public void testWithSecondJarOnTwoLine3() throws IOException { >+ String testWithSecondJarOnTwoLine = "Manifest-Version: 1.0\nAnt-Version: Apache Ant 1.6.5\nCreated-By: 1.5.0_14-b03 (Sun Microsystems Inc.)\nClass-Path: " + FIRST_JAR + WHITESPACE + "second\n" + "Jar.jar\nBuild-Reference: Version toto"; >+ StringReader reader = new StringReader(testWithSecondJarOnTwoLine); >+ this.manifestAnalyzer.analyzeManifestContents(reader); >+ List jars = this.manifestAnalyzer.getCalledFileNames(); >+ assertEquals("Wrong size", 2, jars.size()); >+ assertEquals(FIRST_JAR, jars.get(0)); >+ assertEquals("second", jars.get(1)); >+ } >+ >+ public void testWithSecondJarOnTwoLine4() throws IOException { >+ String testWithSecondJarOnTwoLine = "Manifest-Version: 1.0\nAnt-Version: Apache Ant 1.6.5\nCreated-By: 1.5.0_14-b03 (Sun Microsystems Inc.)\nClass-Path: " + FIRST_JAR + "\n" + "second\n" + WHITESPACE + "Jar.jar\nBuild-Reference: Version toto"; >+ StringReader reader = new StringReader(testWithSecondJarOnTwoLine); >+ this.manifestAnalyzer.analyzeManifestContents(reader); >+ List jars = this.manifestAnalyzer.getCalledFileNames(); >+ assertEquals("Wrong size", 1, jars.size()); >+ assertEquals(FIRST_JAR, jars.get(0)); >+ } >+ >+ public void testWithSecondJarOnNextLine5() throws IOException { >+ String testWithSecondJarOnNextLine = "Manifest-Version: 1.0\nAnt-Version: Apache Ant 1.6.5\nCreated-By: 1.5.0_14-b03 (Sun Microsystems Inc.)\nClass-Path: " + FIRST_JAR + "\n"+ WHITESPACE + "secondJar.jar\nBuild-Reference: Version toto"; >+ StringReader reader = new StringReader(testWithSecondJarOnNextLine); >+ this.manifestAnalyzer.analyzeManifestContents(reader); >+ List jars = this.manifestAnalyzer.getCalledFileNames(); >+ assertEquals("Wrong size", 1, jars.size()); >+ assertEquals(FIRST_JAR + SECOND_JAR, jars.get(0)); >+ } >+ >+ public void testWithSecondJarOnTwoLineEndedWithEOF() throws IOException { >+ String testWithSecondJarOnTwoLineEndedWithEOF = "Manifest-Version: 1.0\nAnt-Version: Apache Ant 1.6.5\nCreated-By: 1.5.0_14-b03 (Sun Microsystems Inc.)\nClass-Path: " + FIRST_JAR + " second\n Jar.jar"; >+ StringReader reader = new StringReader(testWithSecondJarOnTwoLineEndedWithEOF); >+ this.manifestAnalyzer.analyzeManifestContents(reader); >+ List jars = this.manifestAnalyzer.getCalledFileNames(); >+ assertEquals("Wrong size", 1, jars.size()); >+ assertEquals(FIRST_JAR, jars.get(0)); >+ } >+ >+ public void testWithSecondJarOnTwoLineEndedWithEOF2() throws IOException { >+ String testWithSecondJarOnTwoLineEndedWithEOF = "Manifest-Version: 1.0\nAnt-Version: Apache Ant 1.6.5\nCreated-By: 1.5.0_14-b03 (Sun Microsystems Inc.)\nClass-Path: " + FIRST_JAR + " second\n Jar.jar\n"; >+ StringReader reader = new StringReader(testWithSecondJarOnTwoLineEndedWithEOF); >+ this.manifestAnalyzer.analyzeManifestContents(reader); >+ List jars = this.manifestAnalyzer.getCalledFileNames(); >+ assertEquals("Wrong size", 2, jars.size()); >+ assertEquals(FIRST_JAR, jars.get(0)); >+ assertEquals(SECOND_JAR, jars.get(1)); >+ } >+ >+ public void testWithSecondJarOnTwoLineEndedWithWhiteSpaceEOF() throws IOException { >+ String testWithSecondJarOnTwoLineEndedWithWhiteSpaceEOF = "Manifest-Version: 1.0\nAnt-Version: Apache Ant 1.6.5\nCreated-By: 1.5.0_14-b03 (Sun Microsystems Inc.)\nClass-Path: " + FIRST_JAR + " second\n Jar.jar "; >+ StringReader reader = new StringReader(testWithSecondJarOnTwoLineEndedWithWhiteSpaceEOF); >+ this.manifestAnalyzer.analyzeManifestContents(reader); >+ List jars = this.manifestAnalyzer.getCalledFileNames(); >+ assertEquals("Wrong size", 2, jars.size()); >+ assertEquals(FIRST_JAR, jars.get(0)); >+ assertEquals(SECOND_JAR, jars.get(1)); >+ } >+ >+ public void testWithSecondJarOnTwoLineEndedWithWhiteSpaceNewLineEOF() throws IOException { >+ String testWithSecondJarOnTwoLineEndedWithWhiteSpaceNewLineEOF = "Manifest-Version: 1.0\nAnt-Version: Apache Ant 1.6.5\nCreated-By: 1.5.0_14-b03 (Sun Microsystems Inc.)\nClass-Path: " + FIRST_JAR + " second\n Jar.jar \n"; >+ StringReader reader = new StringReader(testWithSecondJarOnTwoLineEndedWithWhiteSpaceNewLineEOF); >+ this.manifestAnalyzer.analyzeManifestContents(reader); >+ List jars = this.manifestAnalyzer.getCalledFileNames(); >+ assertEquals("Wrong size", 2, jars.size()); >+ assertEquals(FIRST_JAR, jars.get(0)); >+ assertEquals(SECOND_JAR, jars.get(1)); >+ } >+ >+ public void testWithSecondJarOnTwoLineEndedWithNewLineEOF() throws IOException { >+ String testWithSecondJarOnTwoLineEndedWithNewLineEOF = "Manifest-Version: 1.0\nAnt-Version: Apache Ant 1.6.5\nCreated-By: 1.5.0_14-b03 (Sun Microsystems Inc.)\nClass-Path: " + FIRST_JAR + " second\n Jar.jar\n"; >+ StringReader reader = new StringReader(testWithSecondJarOnTwoLineEndedWithNewLineEOF); >+ this.manifestAnalyzer.analyzeManifestContents(reader); >+ List jars = this.manifestAnalyzer.getCalledFileNames(); >+ assertEquals("Wrong size", 2, jars.size()); >+ assertEquals(FIRST_JAR, jars.get(0)); >+ assertEquals(SECOND_JAR, jars.get(1)); >+ } >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 265103
:
125864
|
127195
|
127196
| 127487 |
127491