View | Details | Raw Unified | Return to bug 265103 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/jdt/core/tests/compiler/regression/TestAll.java (+1 lines)
Lines 59-64 Link Here
59
	standardTests.add(RuntimeTests.class);
59
	standardTests.add(RuntimeTests.class);
60
	standardTests.add(DebugAttributeTest.class);
60
	standardTests.add(DebugAttributeTest.class);
61
	standardTests.add(NullReferenceTest.class);
61
	standardTests.add(NullReferenceTest.class);
62
	standardTests.add(ManifestAnalyzerTest.class);
62
	if (UnconditionalFlowInfo.coverageTestFlag) {
63
	if (UnconditionalFlowInfo.coverageTestFlag) {
63
		standardTests.add(NullReferenceImplTests.class);
64
		standardTests.add(NullReferenceImplTests.class);
64
	}
65
	}
(-)src/org/eclipse/jdt/core/tests/compiler/regression/ManifestAnalyzerTest.java (+107 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2009 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     Fabrice Matrat - initial contribution
10
 *     IBM Corporation - code review and integration
11
 *******************************************************************************/
12
package org.eclipse.jdt.core.tests.compiler.regression;
13
import java.io.IOException;
14
import java.io.StringReader;
15
import java.util.List;
16
17
import org.eclipse.jdt.internal.compiler.batch.ClasspathJar.ManifestAnalyzer;
18
19
public class ManifestAnalyzerTest extends AbstractRegressionTest {
20
21
	private static final String FIRST_JAR = "firstJar.jar";
22
	private static final String SECOND_JAR = "secondJar.jar";
23
	private static final String WHITESPACE = " ";
24
25
	ManifestAnalyzer manifestAnalyzer = new ManifestAnalyzer();
26
27
	public ManifestAnalyzerTest(String name) {
28
		super(name);
29
	}
30
	public void testWithOneJar() throws IOException {
31
		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";
32
		StringReader reader = new StringReader(testWithOneJar);
33
		manifestAnalyzer.analyzeManifestContents(reader);
34
		List jars = manifestAnalyzer.getCalledFileNames();
35
		assertEquals("Wrong size", 1, jars.size());
36
		assertEquals(FIRST_JAR, jars.get(0));
37
	}
38
39
	public void testWithOneJarWithWiteSpace() throws IOException {
40
		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";
41
		StringReader reader = new StringReader(testWithOneJarWithWiteSpace);
42
		manifestAnalyzer.analyzeManifestContents(reader);
43
		List jars = manifestAnalyzer.getCalledFileNames();
44
		assertEquals("Wrong size", 1, jars.size());
45
		assertEquals(FIRST_JAR, jars.get(0));
46
	}
47
48
	public void testWithSecondJarOnNextLine() throws IOException {
49
		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";
50
		StringReader reader = new StringReader(testWithSecondJarOnNextLine);
51
		manifestAnalyzer.analyzeManifestContents(reader);
52
		List jars = manifestAnalyzer.getCalledFileNames();
53
		assertEquals("Wrong size", 2, jars.size());
54
		assertEquals(FIRST_JAR, jars.get(0));
55
		assertEquals(SECOND_JAR, jars.get(1));
56
	}
57
58
	public void testWithSecondJarOnTwoLine() throws IOException {
59
		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 + " second\n" + WHITESPACE + "Jar.jar\nBuild-Reference: Version toto";
60
		StringReader reader = new StringReader(testWithSecondJarOnTwoLine);
61
		manifestAnalyzer.analyzeManifestContents(reader);
62
		List jars = manifestAnalyzer.getCalledFileNames();
63
		assertEquals("Wrong size", 2, jars.size());
64
		assertEquals(FIRST_JAR, jars.get(0));
65
		assertEquals(SECOND_JAR, jars.get(1));
66
	}
67
68
	public void testWithSecondJarOnTwoLineEndedWithEOF() throws IOException {
69
		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";
70
		StringReader reader = new StringReader(testWithSecondJarOnTwoLineEndedWithEOF);
71
		manifestAnalyzer.analyzeManifestContents(reader);
72
		List jars = manifestAnalyzer.getCalledFileNames();
73
		assertEquals("Wrong size", 2, jars.size());
74
		assertEquals(FIRST_JAR, jars.get(0));
75
		assertEquals(SECOND_JAR, jars.get(1));
76
	}
77
78
	public void testWithSecondJarOnTwoLineEndedWithWhiteSpaceEOF() throws IOException {
79
		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 ";
80
		StringReader reader = new StringReader(testWithSecondJarOnTwoLineEndedWithWhiteSpaceEOF);
81
		manifestAnalyzer.analyzeManifestContents(reader);
82
		List jars = manifestAnalyzer.getCalledFileNames();
83
		assertEquals("Wrong size", 2, jars.size());
84
		assertEquals(FIRST_JAR, jars.get(0));
85
		assertEquals(SECOND_JAR, jars.get(1));
86
	}
87
88
	public void testWithSecondJarOnTwoLineEndedWithWhiteSpaceNewLineEOF() throws IOException {
89
		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";
90
		StringReader reader = new StringReader(testWithSecondJarOnTwoLineEndedWithWhiteSpaceNewLineEOF);
91
		manifestAnalyzer.analyzeManifestContents(reader);
92
		List jars = manifestAnalyzer.getCalledFileNames();
93
		assertEquals("Wrong size", 2, jars.size());
94
		assertEquals(FIRST_JAR, jars.get(0));
95
		assertEquals(SECOND_JAR, jars.get(1));
96
	}
97
98
	public void testWithSecondJarOnTwoLineEndedWithNewLineEOF() throws IOException {
99
		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";
100
		StringReader reader = new StringReader(testWithSecondJarOnTwoLineEndedWithNewLineEOF);
101
		manifestAnalyzer.analyzeManifestContents(reader);
102
		List jars = manifestAnalyzer.getCalledFileNames();
103
		assertEquals("Wrong size", 2, jars.size());
104
		assertEquals(FIRST_JAR, jars.get(0));
105
		assertEquals(SECOND_JAR, jars.get(1));
106
	}
107
}
(-)batch/org/eclipse/jdt/internal/compiler/batch/ClasspathJar.java (-8 / +36 lines)
Lines 7-12 Link Here
7
 *
7
 *
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 *     Fabrice Matrat - fix for 265103
10
 *******************************************************************************/
11
 *******************************************************************************/
11
package org.eclipse.jdt.internal.compiler.batch;
12
package org.eclipse.jdt.internal.compiler.batch;
12
13
Lines 66-71 Link Here
66
		this.calledFilesNames = null;
67
		this.calledFilesNames = null;
67
		for (;;) {
68
		for (;;) {
68
			currentChar = reader.read();
69
			currentChar = reader.read();
70
			if (currentChar == '\r')  // skip \r, will consider \n later (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=251079 )
71
				currentChar = reader.read();
69
			switch (state) {
72
			switch (state) {
70
				case START:
73
				case START:
71
					if (currentChar == -1) {
74
					if (currentChar == -1) {
Lines 98-113 Link Here
98
					break;
101
					break;
99
				case SKIPPING_WHITESPACE:
102
				case SKIPPING_WHITESPACE:
100
					if (currentChar == -1) {
103
					if (currentChar == -1) {
104
						// >>>>>>>>>>>>>>>>>> Add the latest jar read
105
						addCurrentTokenJarWhenNecessary(currentJarToken);
101
						return true;
106
						return true;
102
					} else if (currentChar == '\n') {
107
					} else if (currentChar == '\n') {
103
						state = CONTINUING;
108
						state = CONTINUING;
104
					} else if (currentChar != ' ') {
109
					} else if (currentChar != ' ') {
105
						currentJarToken.append((char) currentChar);
110
						currentJarToken.append((char) currentChar);
106
						state = READING_JAR;
111
						state = READING_JAR;
112
					} else {
113
						// >>>>>>>>>>>>>>>>>> Add the latest jar read
114
						addCurrentTokenJarWhenNecessary(currentJarToken);
107
					}
115
					}
108
					break;
116
					break;
109
				case CONTINUING:
117
				case CONTINUING:
110
					if (currentChar == -1) {
118
					if (currentChar == -1) {
119
						// >>>>>>>>>>>>>>>>>> Add the latest jar read
120
						addCurrentTokenJarWhenNecessary(currentJarToken);
111
						return true;
121
						return true;
112
					} else if (currentChar == '\n') {
122
					} else if (currentChar == '\n') {
113
						state = START;
123
						state = START;
Lines 117-124 Link Here
117
						state = IN_CLASSPATH_HEADER;
127
						state = IN_CLASSPATH_HEADER;
118
						substate = 1;
128
						substate = 1;
119
					} else if (this.calledFilesNames == null) {
129
					} else if (this.calledFilesNames == null) {
120
						return false;
130
						// >>>>>>>>>>>>>>>>>> Add the latest jar read
131
						return addCurrentTokenJarWhenNecessary(currentJarToken);
121
					} else {
132
					} else {
133
						// >>>>>>>>>>>>>>>>>> Add the latest jar read
134
						addCurrentTokenJarWhenNecessary(currentJarToken);
122
						state = SKIP_LINE;
135
						state = SKIP_LINE;
123
					}
136
					}
124
					break;
137
					break;
Lines 131-140 Link Here
131
					break;
144
					break;
132
				case READING_JAR:	
145
				case READING_JAR:	
133
					if (currentChar == -1) {
146
					if (currentChar == -1) {
134
						return false;
147
						// >>>>>>>>>>>>>>>>>> Add the latest jar read
148
						return addCurrentTokenJarWhenNecessary(currentJarToken);
135
					} else if (currentChar == '\n') {
149
					} else if (currentChar == '\n') {
136
						// appends token below
150
						// appends token below
137
						state = CONTINUING;
151
						state = CONTINUING;
152
						// >>>>>>>>>>> Add a break to not add the jar yet as it can continue on the next line
153
						break;
138
					} else if (currentChar == ' ') {
154
					} else if (currentChar == ' ') {
139
						// appends token below
155
						// appends token below
140
						state = SKIPPING_WHITESPACE;
156
						state = SKIPPING_WHITESPACE;
Lines 142-156 Link Here
142
						currentJarToken.append((char) currentChar);
158
						currentJarToken.append((char) currentChar);
143
						break;
159
						break;
144
					}
160
					}
145
					if (this.calledFilesNames == null) {
161
					addCurrentTokenJarWhenNecessary(currentJarToken);
146
						this.calledFilesNames = new ArrayList();
147
					}
148
					this.calledFilesNames.add(currentJarToken.toString());
149
					currentJarToken.setLength(0);
150
					break;
162
					break;
151
			}
163
			}
152
		}	
164
		}
165
	}	
166
167
	// >>>>>>>>>>>>>>>> Method Extracted from analyzeManifestContents in the READING_JAR Block
168
	private boolean addCurrentTokenJarWhenNecessary(StringBuffer currentJarToken) {
169
		if (currentJarToken != null && currentJarToken.length() > 0) {
170
			if (this.calledFilesNames == null) {
171
				this.calledFilesNames = new ArrayList();
172
			}
173
			this.calledFilesNames.add(currentJarToken.toString());
174
			currentJarToken.setLength(0);
175
			return true;
176
		}
177
		return false;
153
	}
178
	}
179
	// <<<<<<<<<<<<<<<<<<<<<<
180
	
181
	
154
	public int getClasspathSectionsCount() {
182
	public int getClasspathSectionsCount() {
155
		return this.ClasspathSectionsCount;
183
		return this.ClasspathSectionsCount;
156
	}
184
	}

Return to bug 265103