View Javadoc
1   package org.codehaus.plexus.compiler.javac;
2   
3   /**
4    * The MIT License
5    *
6    * Copyright (c) 2005, The Codehaus
7    *
8    * Permission is hereby granted, free of charge, to any person obtaining a copy of
9    * this software and associated documentation files (the "Software"), to deal in
10   * the Software without restriction, including without limitation the rights to
11   * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
12   * of the Software, and to permit persons to whom the Software is furnished to do
13   * so, subject to the following conditions:
14   *
15   * The above copyright notice and this permission notice shall be included in all
16   * copies or substantial portions of the Software.
17   *
18   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24   * SOFTWARE.
25   */
26  import java.io.BufferedReader;
27  import java.io.IOException;
28  import java.io.StringReader;
29  import java.util.ArrayList;
30  import java.util.List;
31  import java.util.stream.Stream;
32  
33  import org.codehaus.plexus.compiler.CompilerMessage;
34  import org.codehaus.plexus.util.Os;
35  import org.junit.jupiter.api.Test;
36  import org.junit.jupiter.params.ParameterizedTest;
37  import org.junit.jupiter.params.provider.Arguments;
38  import org.junit.jupiter.params.provider.MethodSource;
39  
40  import static org.hamcrest.CoreMatchers.endsWith;
41  import static org.hamcrest.CoreMatchers.startsWith;
42  import static org.hamcrest.MatcherAssert.assertThat;
43  import static org.hamcrest.Matchers.hasSize;
44  import static org.hamcrest.Matchers.is;
45  import static org.hamcrest.Matchers.notNullValue;
46  
47  /**
48   * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
49   * @author Alexander Kriegisch
50   */
51  public class ErrorMessageParserTest {
52      private static final String EOL = System.getProperty("line.separator");
53  
54      @Test
55      public void testDeprecationMessage() throws Exception {
56          String error =
57                  "target/compiler-src/testDeprecation/Foo.java:1: warning: Date(java.lang.String) in java.util.Date has been deprecated"
58                          + EOL + "import java.util.Date;public class Foo{    private Date date = new Date( \"foo\");}"
59                          + EOL + "                                                               ^"
60                          + EOL;
61  
62          CompilerMessage compilerError = JavacCompiler.parseModernError(0, error);
63  
64          assertThat(compilerError, notNullValue());
65  
66          assertThat(compilerError.isError(), is(false));
67  
68          assertThat(compilerError.getMessage(), is("Date(java.lang.String) in java.util.Date has been deprecated"));
69  
70          assertThat(compilerError.getStartColumn(), is(63));
71  
72          assertThat(compilerError.getEndColumn(), is(66));
73  
74          assertThat(compilerError.getStartLine(), is(1));
75  
76          assertThat(compilerError.getEndLine(), is(1));
77      }
78  
79      @Test
80      public void testWarningMessage() {
81          String error = "target/compiler-src/testWarning/Foo.java:8: warning: finally clause cannot complete normally"
82                  + EOL + "        finally { return; }"
83                  + EOL + "                          ^"
84                  + EOL;
85  
86          CompilerMessage compilerError = JavacCompiler.parseModernError(0, error);
87  
88          assertThat(compilerError, notNullValue());
89  
90          assertThat(compilerError.isError(), is(false));
91  
92          assertThat(compilerError.getMessage(), is("finally clause cannot complete normally"));
93  
94          assertThat(compilerError.getStartColumn(), is(26));
95  
96          assertThat(compilerError.getEndColumn(), is(27));
97  
98          assertThat(compilerError.getStartLine(), is(8));
99  
100         assertThat(compilerError.getEndLine(), is(8));
101     }
102 
103     @Test
104     public void testErrorMessage() {
105         String error = "Foo.java:7: not a statement" + EOL + "         i;" + EOL + "         ^" + EOL;
106 
107         CompilerMessage compilerError = JavacCompiler.parseModernError(1, error);
108 
109         assertThat(compilerError, notNullValue());
110 
111         assertThat(compilerError.isError(), is(true));
112 
113         assertThat(compilerError.getMessage(), is("not a statement"));
114 
115         assertThat(compilerError.getStartColumn(), is(9));
116 
117         assertThat(compilerError.getEndColumn(), is(11));
118 
119         assertThat(compilerError.getStartLine(), is(7));
120 
121         assertThat(compilerError.getEndLine(), is(7));
122     }
123 
124     @Test
125     public void testUnknownSymbolError() {
126         String error = "./org/codehaus/foo/UnknownSymbol.java:7: cannot find symbol" + EOL + "symbol  : method foo()"
127                 + EOL + "location: class org.codehaus.foo.UnknownSymbol"
128                 + EOL + "        foo();"
129                 + EOL + "        ^"
130                 + EOL;
131 
132         CompilerMessage compilerError = JavacCompiler.parseModernError(1, error);
133 
134         assertThat(compilerError, notNullValue());
135 
136         assertThat(compilerError.isError(), is(true));
137 
138         assertThat(
139                 compilerError.getMessage(),
140                 is("cannot find symbol" + EOL + "symbol  : method foo()" + EOL
141                         + "location: class org.codehaus.foo.UnknownSymbol"));
142 
143         assertThat(compilerError.getStartColumn(), is(8));
144 
145         assertThat(compilerError.getEndColumn(), is(14));
146 
147         assertThat(compilerError.getStartLine(), is(7));
148 
149         assertThat(compilerError.getEndLine(), is(7));
150     }
151 
152     @Test
153     public void testTwoErrors() throws IOException {
154         String errors = "./org/codehaus/foo/ExternalDeps.java:4: package org.apache.commons.lang does not exist" + EOL
155                 + "import org.apache.commons.lang.StringUtils;"
156                 + EOL + "                               ^"
157                 + EOL + "./org/codehaus/foo/ExternalDeps.java:12: cannot find symbol"
158                 + EOL + "symbol  : variable StringUtils"
159                 + EOL + "location: class org.codehaus.foo.ExternalDeps"
160                 + EOL + "          System.out.println( StringUtils.upperCase( str)  );"
161                 + EOL + "                              ^"
162                 + EOL + "2 errors"
163                 + EOL;
164 
165         List<CompilerMessage> messages =
166                 JavacCompiler.parseModernStream(1, new BufferedReader(new StringReader(errors)));
167 
168         assertThat(messages.size(), is(2));
169     }
170 
171     @Test
172     public void testAnotherTwoErrors() throws IOException {
173         String errors = "./org/codehaus/foo/ExternalDeps.java:4: package org.apache.commons.lang does not exist" + EOL
174                 + "import org.apache.commons.lang.StringUtils;"
175                 + EOL + "                               ^"
176                 + EOL + "./org/codehaus/foo/ExternalDeps.java:12: cannot find symbol"
177                 + EOL + "symbol  : variable StringUtils"
178                 + EOL + "location: class org.codehaus.foo.ExternalDeps"
179                 + EOL + "          System.out.println( StringUtils.upperCase( str)  );"
180                 + EOL + "                              ^"
181                 + EOL + "2 errors"
182                 + EOL;
183 
184         List<CompilerMessage> messages =
185                 JavacCompiler.parseModernStream(1, new BufferedReader(new StringReader(errors)));
186 
187         assertThat(messages.size(), is(2));
188     }
189 
190     @Test
191     public void testAssertError() throws IOException {
192         String errors =
193                 "./org/codehaus/foo/ReservedWord.java:5: as of release 1.4, 'assert' is a keyword, and may not be used as an identifier"
194                         + EOL + "(try -source 1.3 or lower to use 'assert' as an identifier)"
195                         + EOL + "        String assert;"
196                         + EOL + "               ^"
197                         + EOL + "1 error"
198                         + EOL;
199 
200         List<CompilerMessage> messages =
201                 JavacCompiler.parseModernStream(1, new BufferedReader(new StringReader(errors)));
202 
203         assertThat(messages.size(), is(1));
204     }
205 
206     @Test
207     public void testLocalizedWarningNotTreatedAsError() throws IOException {
208         String errors =
209                 "./src/main/java/Main.java:9: \u8b66\u544a:[deprecation] java.io.File \u306e toURL() \u306f\u63a8\u5968\u3055\u308c\u307e\u305b\u3093\u3002"
210                         + EOL + "    new File( path ).toURL()"
211                         + EOL + "                    ^"
212                         + EOL + "\u8b66\u544a 1 \u500b"
213                         + EOL;
214 
215         List<CompilerMessage> messages =
216                 JavacCompiler.parseModernStream(0, new BufferedReader(new StringReader(errors)));
217 
218         assertThat(messages.size(), is(1));
219         assertThat(messages.get(0).isError(), is(false));
220     }
221 
222     @Test
223     public void testUnixFileNames() {
224         String error = "/my/prj/src/main/java/test/prj/App.java:11: not a statement" + EOL
225                 + "        System.out.println( \"Hello World!\" );x"
226                 + EOL + "                                             ^"
227                 + EOL;
228 
229         CompilerMessage compilerError = JavacCompiler.parseModernError(1, error);
230 
231         assertThat(
232                 String.valueOf(compilerError), is("/my/prj/src/main/java/test/prj/App.java:[11,45] not a statement"));
233     }
234 
235     @Test
236     public void testWindowsDriveLettersMCOMPILER140() {
237         String error =
238                 "c:\\Documents and Settings\\My Self\\Documents\\prj\\src\\main\\java\\test\\prj\\App.java:11: not a statement"
239                         + EOL + "        System.out.println( \"Hello World!\" );x"
240                         + EOL + "                                             ^"
241                         + EOL;
242 
243         CompilerMessage compilerError = JavacCompiler.parseModernError(1, error);
244 
245         assertThat(
246                 String.valueOf(compilerError),
247                 is(
248                         "c:\\Documents and Settings\\My Self\\Documents\\prj\\src\\main\\java\\test\\prj\\App.java:[11,45] not a statement"));
249     }
250 
251     /**
252      * Test that CRLF is parsed correctly wrt. the filename in warnings.
253      *
254      * @throws Exception
255      */
256     @Test
257     public void testCRLF_windows() throws Exception {
258         // This test is only relevant on windows (test hardcodes EOL)
259         if (!Os.isFamily("windows")) {
260             return;
261         }
262 
263         String CRLF = new String(new byte[] {(byte) 0x0D, (byte) 0x0A});
264         String errors = "warning: [options] bootstrap class path not set in conjunction with -source 1.6" + CRLF
265                 + "[parsing started RegularFileObject[C:\\commander\\pre\\ec\\ec-http\\src\\main\\java\\com\\electriccloud\\http\\HttpServerImpl.java]]"
266                 + CRLF + "[parsing completed 19ms]"
267                 + CRLF
268                 + "[parsing started RegularFileObject[C:\\commander\\pre\\ec\\ec-http\\src\\main\\java\\com\\electriccloud\\http\\HttpServer.java]]"
269                 + CRLF + "[parsing completed 1ms]"
270                 + CRLF
271                 + "[parsing started RegularFileObject[C:\\commander\\pre\\ec\\ec-http\\src\\main\\java\\com\\electriccloud\\http\\HttpServerAware.java]]"
272                 + CRLF + "[parsing completed 1ms]"
273                 + CRLF
274                 + "[parsing started RegularFileObject[C:\\commander\\pre\\ec\\ec-http\\src\\main\\java\\com\\electriccloud\\http\\HttpUtil.java]]"
275                 + CRLF + "[parsing completed 3ms]"
276                 + CRLF
277                 + "[parsing started RegularFileObject[C:\\commander\\pre\\ec\\ec-http\\src\\main\\java\\com\\electriccloud\\http\\HttpThreadPool.java]]"
278                 + CRLF + "[parsing completed 3ms]"
279                 + CRLF
280                 + "[parsing started RegularFileObject[C:\\commander\\pre\\ec\\ec-http\\src\\main\\java\\com\\electriccloud\\http\\HttpQueueAware.java]]"
281                 + CRLF + "[parsing completed 0ms]"
282                 + CRLF
283                 + "[parsing started RegularFileObject[C:\\commander\\pre\\ec\\ec-http\\src\\main\\java\\com\\electriccloud\\http\\HttpThreadPoolAware.java]]"
284                 + CRLF + "[parsing completed 1ms]"
285                 + CRLF + "[search path for source files: C:\\commander\\pre\\ec\\ec-http\\src\\main\\java]"
286                 + CRLF
287                 + "[search path for class files: C:\\Program Files\\Java\\jdk1.7.0_04\\jre\\lib\\resources.jar,C:\\Program Files\\Java\\jdk1.7.0_04\\jre\\lib\\rt.jar,C:\\Program Files\\Java\\jdk1.7.0_04\\jre\\lib\\sunrsasign.jar,C:\\Program Files\\Java\\jdk1.7.0_04\\jre\\lib\\jsse.jar,C:\\Program Files\\Java\\jdk1.7.0_04\\jre\\lib\\jce.jar,C:\\Program Files\\Java\\jdk1.7.0_04\\jre\\lib\\charsets.jar,C:\\Program Files\\Java\\jdk1.7.0_04\\jre\\lib\\jfr.jar,C:\\Program Files\\Java\\jdk1.7.0_04\\jre\\classes,C:\\Program Files\\Java\\jdk1.7.0_04\\jre\\lib\\ext\\dnsns.jar,C:\\Program Files\\Java\\jdk1.7.0_04\\jre\\lib\\ext\\localedata.jar,C:\\Program Files\\Java\\jdk1.7.0_04\\jre\\lib\\ext\\sunec.jar,C:\\Program Files\\Java\\jdk1.7.0_04\\jre\\lib\\ext\\sunjce_provider.jar,C:\\Program Files\\Java\\jdk1.7.0_04\\jre\\lib\\ext\\sunmscapi.jar,C:\\Program Files\\Java\\jdk1.7.0_04\\jre\\lib\\ext\\zipfs.jar,C:\\commander\\pre\\ec\\ec-http\\target\\classes,C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-core\\1.0.0-SNAPSHOT\\ec-core-1.0.0-SNAPSHOT.jar,C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-lock\\1.0.0-SNAPSHOT\\ec-lock-1.0.0-SNAPSHOT.jar,C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-timer\\1.0.0-SNAPSHOT\\ec-timer-1.0.0-SNAPSHOT.jar,C:\\Users\\anders\\.m2\\repository\\org\\apache\\commons\\commons-math\\2.2\\commons-math-2.2.jar,C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-validation\\1.0.0-SNAPSHOT\\ec-validation-1.0.0-SNAPSHOT.jar,C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-xml\\1.0.0-SNAPSHOT\\ec-xml-1.0.0-SNAPSHOT.jar,C:\\Users\\anders\\.m2\\repository\\commons-beanutils\\commons-beanutils\\1.8.3-PATCH1\\commons-beanutils-1.8.3-PATCH1.jar,C:\\Users\\anders\\.m2\\repository\\commons-collections\\commons-collections\\3.2.1\\commons-collections-3.2.1.jar,C:\\Users\\anders\\.m2\\repository\\dom4j\\dom4j\\1.6.1-PATCH1\\dom4j-1.6.1-PATCH1.jar,C:\\Users\\anders\\.m2\\repository\\javax\\validation\\validation-api\\1.0.0.GA\\validation-api-1.0.0.GA.jar,C:\\Users\\anders\\.m2\\repository\\org\\codehaus\\jackson\\jackson-core-asl\\1.9.7\\jackson-core-asl-1.9.7.jar,C:\\Users\\anders\\.m2\\repository\\org\\codehaus\\jackson\\jackson-mapper-asl\\1.9.7\\jackson-mapper-asl-1.9.7.jar,C:\\Users\\anders\\.m2\\repository\\org\\hibernate\\hibernate-core\\3.6.7-PATCH14\\hibernate-core-3.6.7-PATCH14.jar,C:\\Users\\anders\\.m2\\repository\\antlr\\antlr\\2.7.6\\antlr-2.7.6.jar,C:\\Users\\anders\\.m2\\repository\\org\\hibernate\\hibernate-commons-annotations\\3.2.0.Final\\hibernate-commons-annotations-3.2.0.Final.jar,C:\\Users\\anders\\.m2\\repository\\javax\\transaction\\jta\\1.1\\jta-1.1.jar,C:\\Users\\anders\\.m2\\repository\\org\\hibernate\\javax\\persistence\\hibernate-jpa-2.0-api\\1.0.1.Final\\hibernate-jpa-2.0-api-1.0.1.Final.jar,C:\\Users\\anders\\.m2\\repository\\org\\hyperic\\sigar\\1.6.5.132\\sigar-1.6.5.132.jar,C:\\Users\\anders\\.m2\\repository\\org\\springframework\\spring-context\\3.1.1.RELEASE-PATCH1\\spring-context-3.1.1.RELEASE-PATCH1.jar,C:\\Users\\anders\\.m2\\repository\\org\\springframework\\spring-expression\\3.1.1.RELEASE-PATCH1\\spring-expression-3.1.1.RELEASE-PATCH1.jar,C:\\Users\\anders\\.m2\\repository\\org\\springframework\\spring-core\\3.1.1.RELEASE-PATCH1\\spring-core-3.1.1.RELEASE-PATCH1.jar,C:\\Users\\anders\\.m2\\repository\\tanukisoft\\wrapper\\3.5.14\\wrapper-3.5.14.jar,C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-log\\1.0.0-SNAPSHOT\\ec-log-1.0.0-SNAPSHOT.jar,C:\\Users\\anders\\.m2\\repository\\ch\\qos\\logback\\logback-classic\\1.0.3-PATCH4\\logback-classic-1.0.3-PATCH4.jar,C:\\Users\\anders\\.m2\\repository\\ch\\qos\\logback\\logback-core\\1.0.3-PATCH4\\logback-core-1.0.3-PATCH4.jar,C:\\Users\\anders\\.m2\\repository\\org\\slf4j\\slf4j-api\\1.6.4\\slf4j-api-1.6.4.jar,C:\\Users\\anders\\.m2\\repository\\org\\slf4j\\jul-to-slf4j\\1.6.4\\jul-to-slf4j-1.6.4.jar,C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-queue\\1.0.0-SNAPSHOT\\ec-queue-1.0.0-SNAPSHOT.jar,C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-security\\1.0.0-SNAPSHOT\\ec-security-1.0.0-SNAPSHOT.jar,C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-acl\\1.0.0-SNAPSHOT\\ec-acl-1.0.0-SNAPSHOT.jar,C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-transaction\\1.0.0-SNAPSHOT\\ec-transaction-1.0.0-SNAPSHOT.jar,C:\\Users\\anders\\.m2\\repository\\org\\aspectj\\aspectjrt\\1.7.0.M1-PATCH1\\aspectjrt-1.7.0.M1-PATCH1.jar,C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-crypto\\1.0.0-SNAPSHOT\\ec-crypto-1.0.0-SNAPSHOT.jar,C:\\Users\\anders\\.m2\\repository\\org\\bouncycastle\\bcprov-jdk16\\1.46\\bcprov-jdk16-1.46.jar,C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-property\\1.0.0-SNAPSHOT\\ec-property-1.0.0-SNAPSHOT.jar,C:\\Users\\anders\\.m2\\repository\\org\\apache\\commons\\commons-lang3\\3.1\\commons-lang3-3.1.jar,C:\\Users\\anders\\.m2\\repository\\org\\springframework\\spring-tx\\3.1.1.RELEASE-PATCH1\\spring-tx-3.1.1.RELEASE-PATCH1.jar,C:\\Users\\anders\\.m2\\repository\\org\\aopalliance\\com.springsource.org.aopalliance\\1.0.0\\com.springsource.org.aopalliance-1.0.0.jar,C:\\Users\\anders\\.m2\\repository\\org\\springframework\\ldap\\spring-ldap-core\\1.3.1.RELEASE\\spring-ldap-core-1.3.1.RELEASE.jar,C:\\Users\\anders\\.m2\\repository\\commons-lang\\commons-lang\\2.5\\commons-lang-2.5.jar,C:\\Users\\anders\\.m2\\repository\\org\\springframework\\security\\spring-security-core\\2.0.6.PATCH1\\spring-security-core-2.0.6.PATCH1.jar,C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-util\\1.0.0-SNAPSHOT\\ec-util-1.0.0-SNAPSHOT.jar,C:\\Users\\anders\\.m2\\repository\\cglib\\cglib-nodep\\2.2.2\\cglib-nodep-2.2.2.jar,C:\\Users\\anders\\.m2\\repository\\org\\apache\\commons\\commons-digester3\\3.2-PATCH5\\commons-digester3-3.2-PATCH5.jar,C:\\Users\\anders\\.m2\\repository\\cglib\\cglib\\2.2.2\\cglib-2.2.2.jar,C:\\Users\\anders\\.m2\\repository\\asm\\asm\\3.3.1\\asm-3.3.1.jar,C:\\Users\\anders\\.m2\\repository\\org\\springframework\\spring-aop\\3.1.1.RELEASE-PATCH1\\spring-aop-3.1.1.RELEASE-PATCH1.jar,C:\\Users\\anders\\.m2\\repository\\com\\google\\guava\\guava\\12.0\\guava-12.0.jar,C:\\Users\\anders\\.m2\\repository\\com\\google\\code\\findbugs\\jsr305\\2.0.0\\jsr305-2.0.0.jar,C:\\Users\\anders\\.m2\\repository\\com\\intellij\\annotations\\116.108\\annotations-116.108.jar,C:\\Users\\anders\\.m2\\repository\\commons-io\\commons-io\\2.3\\commons-io-2.3.jar,C:\\Users\\anders\\.m2\\repository\\net\\jcip\\jcip-annotations\\1.0\\jcip-annotations-1.0.jar,C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar,C:\\Users\\anders\\.m2\\repository\\commons-codec\\commons-codec\\1.6\\commons-codec-1.6.jar,C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpcore\\4.2\\httpcore-4.2.jar,C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-server\\8.1.4.v20120524\\jetty-server-8.1.4.v20120524.jar,C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\orbit\\javax.servlet\\3.0.0.v201112011016\\javax.servlet-3.0.0.v201112011016.jar,C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-continuation\\8.1.4.v20120524\\jetty-continuation-8.1.4.v20120524.jar,C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-http\\8.1.4.v20120524\\jetty-http-8.1.4.v20120524.jar,C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-io\\8.1.4.v20120524\\jetty-io-8.1.4.v20120524.jar,C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-util\\8.1.4.v20120524\\jetty-util-8.1.4.v20120524.jar,C:\\Users\\anders\\.m2\\repository\\org\\mortbay\\jetty\\servlet-api\\3.0.20100224\\servlet-api-3.0.20100224.jar,C:\\Users\\anders\\.m2\\repository\\org\\springframework\\spring-beans\\3.1.1.RELEASE-PATCH1\\spring-beans-3.1.1.RELEASE-PATCH1.jar,C:\\Users\\anders\\.m2\\repository\\org\\springframework\\spring-asm\\3.1.1.RELEASE-PATCH1\\spring-asm-3.1.1.RELEASE-PATCH1.jar,.]"
288                 + CRLF
289                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/net/BindException.class)]]"
290                 + CRLF
291                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/util/ArrayList.class)]]"
292                 + CRLF
293                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/util/Collection.class)]]"
294                 + CRLF
295                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/util/Collections.class)]]"
296                 + CRLF
297                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/util/HashSet.class)]]"
298                 + CRLF
299                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/util/concurrent/TimeUnit.class)]]"
300                 + CRLF
301                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-server\\8.1.4.v20120524\\jetty-server-8.1.4.v20120524.jar(org/eclipse/jetty/server/Handler.class)]]"
302                 + CRLF
303                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-server\\8.1.4.v20120524\\jetty-server-8.1.4.v20120524.jar(org/eclipse/jetty/server/Server.class)]]"
304                 + CRLF
305                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-server\\8.1.4.v20120524\\jetty-server-8.1.4.v20120524.jar(org/eclipse/jetty/server/nio/SelectChannelConnector.class)]]"
306                 + CRLF
307                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-server\\8.1.4.v20120524\\jetty-server-8.1.4.v20120524.jar(org/eclipse/jetty/server/ssl/SslSelectChannelConnector.class)]]"
308                 + CRLF
309                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-util\\8.1.4.v20120524\\jetty-util-8.1.4.v20120524.jar(org/eclipse/jetty/util/ssl/SslContextFactory.class)]]"
310                 + CRLF
311                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\intellij\\annotations\\116.108\\annotations-116.108.jar(org/jetbrains/annotations/NonNls.class)]]"
312                 + CRLF
313                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\intellij\\annotations\\116.108\\annotations-116.108.jar(org/jetbrains/annotations/NotNull.class)]]"
314                 + CRLF
315                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\intellij\\annotations\\116.108\\annotations-116.108.jar(org/jetbrains/annotations/TestOnly.class)]]"
316                 + CRLF
317                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\springframework\\spring-beans\\3.1.1.RELEASE-PATCH1\\spring-beans-3.1.1.RELEASE-PATCH1.jar(org/springframework/beans/factory/BeanNameAware.class)]]"
318                 + CRLF
319                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\springframework\\spring-beans\\3.1.1.RELEASE-PATCH1\\spring-beans-3.1.1.RELEASE-PATCH1.jar(org/springframework/beans/factory/annotation/Autowired.class)]]"
320                 + CRLF
321                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\google\\guava\\guava\\12.0\\guava-12.0.jar(com/google/common/collect/Iterables.class)]]"
322                 + CRLF
323                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-log\\1.0.0-SNAPSHOT\\ec-log-1.0.0-SNAPSHOT.jar(com/electriccloud/log/Log.class)]]"
324                 + CRLF
325                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-log\\1.0.0-SNAPSHOT\\ec-log-1.0.0-SNAPSHOT.jar(com/electriccloud/log/LogFactory.class)]]"
326                 + CRLF
327                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-core\\1.0.0-SNAPSHOT\\ec-core-1.0.0-SNAPSHOT.jar(com/electriccloud/service/ServiceManager.class)]]"
328                 + CRLF
329                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-core\\1.0.0-SNAPSHOT\\ec-core-1.0.0-SNAPSHOT.jar(com/electriccloud/service/ServiceState.class)]]"
330                 + CRLF
331                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-util\\1.0.0-SNAPSHOT\\ec-util-1.0.0-SNAPSHOT.jar(com/electriccloud/util/ExceptionUtil.class)]]"
332                 + CRLF
333                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-util\\1.0.0-SNAPSHOT\\ec-util-1.0.0-SNAPSHOT.jar(com/electriccloud/util/SystemUtil.class)]]"
334                 + CRLF
335                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-util\\1.0.0-SNAPSHOT\\ec-util-1.0.0-SNAPSHOT.jar(com/electriccloud/util/ToString.class)]]"
336                 + CRLF
337                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-util\\1.0.0-SNAPSHOT\\ec-util-1.0.0-SNAPSHOT.jar(com/electriccloud/util/ToStringSupport.class)]]"
338                 + CRLF
339                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/String.class)]]"
340                 + CRLF
341                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Object.class)]]"
342                 + CRLF
343                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/io/Serializable.class)]]"
344                 + CRLF
345                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Comparable.class)]]"
346                 + CRLF
347                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/CharSequence.class)]]"
348                 + CRLF
349                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Enum.class)]]"
350                 + CRLF
351                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-util\\1.0.0-SNAPSHOT\\ec-util-1.0.0-SNAPSHOT.jar(com/electriccloud/util/ToStringAware.class)]]"
352                 + CRLF
353                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\springframework\\spring-beans\\3.1.1.RELEASE-PATCH1\\spring-beans-3.1.1.RELEASE-PATCH1.jar(org/springframework/beans/factory/Aware.class)]]"
354                 + CRLF
355                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-core\\1.0.0-SNAPSHOT\\ec-core-1.0.0-SNAPSHOT.jar(com/electriccloud/service/Service.class)]]"
356                 + CRLF
357                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Integer.class)]]"
358                 + CRLF
359                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/util/concurrent/RejectedExecutionException.class)]]"
360                 + CRLF
361                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-util\\8.1.4.v20120524\\jetty-util-8.1.4.v20120524.jar(org/eclipse/jetty/util/component/AbstractLifeCycle.class)]]"
362                 + CRLF
363                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-util\\8.1.4.v20120524\\jetty-util-8.1.4.v20120524.jar(org/eclipse/jetty/util/thread/ThreadPool.class)]]"
364                 + CRLF
365                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-queue\\1.0.0-SNAPSHOT\\ec-queue-1.0.0-SNAPSHOT.jar(com/electriccloud/queue/ExecuteQueue.class)]]"
366                 + CRLF
367                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-core\\1.0.0-SNAPSHOT\\ec-core-1.0.0-SNAPSHOT.jar(com/electriccloud/service/ServiceManagerAware.class)]]"
368                 + CRLF
369                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-util\\1.0.0-SNAPSHOT\\ec-util-1.0.0-SNAPSHOT.jar(com/electriccloud/util/ToStringImpl.class)]]"
370                 + CRLF
371                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-util\\8.1.4.v20120524\\jetty-util-8.1.4.v20120524.jar(org/eclipse/jetty/util/component/LifeCycle.class)]]"
372                 + CRLF
373                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/InterruptedException.class)]]"
374                 + CRLF
375                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Runnable.class)]]"
376                 + CRLF
377                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Exception.class)]]"
378                 + CRLF
379                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/io/IOException.class)]]"
380                 + CRLF
381                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/security/KeyManagementException.class)]]"
382                 + CRLF
383                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/security/NoSuchAlgorithmException.class)]]"
384                 + CRLF
385                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/security/SecureRandom.class)]]"
386                 + CRLF
387                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/javax/net/ssl/SSLContext.class)]]"
388                 + CRLF
389                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/javax/net/ssl/TrustManager.class)]]"
390                 + CRLF
391                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpcore\\4.2\\httpcore-4.2.jar(org/apache/http/HttpResponse.class)]]"
392                 + CRLF
393                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/client/HttpClient.class)]]"
394                 + CRLF
395                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/client/methods/HttpGet.class)]]"
396                 + CRLF
397                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/client/methods/HttpPost.class)]]"
398                 + CRLF
399                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/client/methods/HttpUriRequest.class)]]"
400                 + CRLF
401                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/conn/scheme/Scheme.class)]]"
402                 + CRLF
403                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/conn/ssl/SSLSocketFactory.class)]]"
404                 + CRLF
405                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpcore\\4.2\\httpcore-4.2.jar(org/apache/http/entity/StringEntity.class)]]"
406                 + CRLF
407                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.class)]]"
408                 + CRLF
409                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/impl/client/DefaultHttpClient.class)]]"
410                 + CRLF
411                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/impl/client/DefaultHttpRequestRetryHandler.class)]]"
412                 + CRLF
413                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.class)]]"
414                 + CRLF
415                 + "C:\\commander\\pre\\ec\\ec-http\\src\\main\\java\\com\\electriccloud\\http\\HttpUtil.java:31: warning: [deprecation] ThreadSafeClientConnManager in org.apache.http.impl.conn.tsccm has been deprecated"
416                 + CRLF + "import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;"
417                 + CRLF + "                                      ^"
418                 + CRLF
419                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpcore\\4.2\\httpcore-4.2.jar(org/apache/http/params/HttpParams.class)]]"
420                 + CRLF
421                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpcore\\4.2\\httpcore-4.2.jar(org/apache/http/protocol/HttpContext.class)]]"
422                 + CRLF
423                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpcore\\4.2\\httpcore-4.2.jar(org/apache/http/util/EntityUtils.class)]]"
424                 + CRLF
425                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-security\\1.0.0-SNAPSHOT\\ec-security-1.0.0-SNAPSHOT.jar(com/electriccloud/security/DummyX509TrustManager.class)]]"
426                 + CRLF
427                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/conn/scheme/SchemeLayeredSocketFactory.class)]]"
428                 + CRLF
429                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/conn/scheme/SchemeSocketFactory.class)]]"
430                 + CRLF
431                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/conn/scheme/LayeredSchemeSocketFactory.class)]]"
432                 + CRLF
433                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/conn/scheme/LayeredSocketFactory.class)]]"
434                 + CRLF
435                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/conn/scheme/SocketFactory.class)]]"
436                 + CRLF
437                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpcore\\4.2\\httpcore-4.2.jar(org/apache/http/params/CoreConnectionPNames.class)]]"
438                 + CRLF
439                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/SuppressWarnings.class)]]"
440                 + CRLF
441                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/annotation/Retention.class)]]"
442                 + CRLF
443                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/annotation/RetentionPolicy.class)]]"
444                 + CRLF
445                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/annotation/Target.class)]]"
446                 + CRLF
447                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/annotation/ElementType.class)]]"
448                 + CRLF
449                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\google\\guava\\guava\\12.0\\guava-12.0.jar(com/google/common/annotations/GwtCompatible.class)]]"
450                 + CRLF
451                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\google\\guava\\guava\\12.0\\guava-12.0.jar(com/google/common/annotations/GwtIncompatible.class)]]"
452                 + CRLF
453                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\com\\electriccloud\\ec-core\\1.0.0-SNAPSHOT\\ec-core-1.0.0-SNAPSHOT.jar(com/electriccloud/infoset/InfosetType.class)]]"
454                 + CRLF
455                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/annotation/Annotation.class)]]"
456                 + CRLF
457                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Override.class)]]"
458                 + CRLF + "[checking com.electriccloud.http.HttpServerImpl]"
459                 + CRLF
460                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Error.class)]]"
461                 + CRLF
462                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Throwable.class)]]"
463                 + CRLF
464                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/RuntimeException.class)]]"
465                 + CRLF
466                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/AutoCloseable.class)]]"
467                 + CRLF
468                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Class.class)]]"
469                 + CRLF
470                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Number.class)]]"
471                 + CRLF
472                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/util/AbstractList.class)]]"
473                 + CRLF
474                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/util/AbstractCollection.class)]]"
475                 + CRLF
476                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Iterable.class)]]"
477                 + CRLF
478                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Byte.class)]]"
479                 + CRLF
480                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Character.class)]]"
481                 + CRLF
482                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Short.class)]]"
483                 + CRLF
484                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-server\\8.1.4.v20120524\\jetty-server-8.1.4.v20120524.jar(org/eclipse/jetty/server/nio/AbstractNIOConnector.class)]]"
485                 + CRLF
486                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-server\\8.1.4.v20120524\\jetty-server-8.1.4.v20120524.jar(org/eclipse/jetty/server/AbstractConnector.class)]]"
487                 + CRLF
488                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-util\\8.1.4.v20120524\\jetty-util-8.1.4.v20120524.jar(org/eclipse/jetty/util/component/AggregateLifeCycle.class)]]"
489                 + CRLF
490                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-server\\8.1.4.v20120524\\jetty-server-8.1.4.v20120524.jar(org/eclipse/jetty/server/Connector.class)]]"
491                 + CRLF
492                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-util\\8.1.4.v20120524\\jetty-util-8.1.4.v20120524.jar(org/eclipse/jetty/util/component/Destroyable.class)]]"
493                 + CRLF
494                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-util\\8.1.4.v20120524\\jetty-util-8.1.4.v20120524.jar(org/eclipse/jetty/util/component/Dumpable.class)]]"
495                 + CRLF
496                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-http\\8.1.4.v20120524\\jetty-http-8.1.4.v20120524.jar(org/eclipse/jetty/http/HttpBuffers.class)]]"
497                 + CRLF
498                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-server\\8.1.4.v20120524\\jetty-server-8.1.4.v20120524.jar(org/eclipse/jetty/server/handler/HandlerWrapper.class)]]"
499                 + CRLF
500                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-server\\8.1.4.v20120524\\jetty-server-8.1.4.v20120524.jar(org/eclipse/jetty/server/handler/AbstractHandlerContainer.class)]]"
501                 + CRLF
502                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\eclipse\\jetty\\jetty-server\\8.1.4.v20120524\\jetty-server-8.1.4.v20120524.jar(org/eclipse/jetty/server/handler/AbstractHandler.class)]]"
503                 + CRLF
504                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/net/SocketException.class)]]"
505                 + CRLF
506                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Thread.class)]]"
507                 + CRLF
508                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/IllegalStateException.class)]]"
509                 + CRLF
510                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/util/AbstractSet.class)]]"
511                 + CRLF
512                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/util/Iterator.class)]]"
513                 + CRLF
514                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/IllegalArgumentException.class)]]"
515                 + CRLF
516                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/util/Locale.class)]]"
517                 + CRLF
518                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Long.class)]]"
519                 + CRLF
520                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Float.class)]]"
521                 + CRLF
522                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Double.class)]]"
523                 + CRLF
524                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Boolean.class)]]"
525                 + CRLF
526                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/Void.class)]]"
527                 + CRLF
528                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/AssertionError.class)]]"
529                 + CRLF
530                 + "[wrote RegularFileObject[C:\\commander\\pre\\ec\\ec-http\\target\\classes\\com\\electriccloud\\http\\HttpServerImpl.class]]"
531                 + CRLF + "[checking com.electriccloud.http.HttpServer]"
532                 + CRLF
533                 + "[wrote RegularFileObject[C:\\commander\\pre\\ec\\ec-http\\target\\classes\\com\\electriccloud\\http\\HttpServer.class]]"
534                 + CRLF + "[checking com.electriccloud.http.HttpThreadPoolAware]"
535                 + CRLF
536                 + "[wrote RegularFileObject[C:\\commander\\pre\\ec\\ec-http\\target\\classes\\com\\electriccloud\\http\\HttpThreadPoolAware.class]]"
537                 + CRLF + "[checking com.electriccloud.http.HttpThreadPool]"
538                 + CRLF
539                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/util/concurrent/Future.class)]]"
540                 + CRLF
541                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/util/concurrent/Callable.class)]]"
542                 + CRLF
543                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/util/Date.class)]]"
544                 + CRLF
545                 + "[wrote RegularFileObject[C:\\commander\\pre\\ec\\ec-http\\target\\classes\\com\\electriccloud\\http\\HttpThreadPool.class]]"
546                 + CRLF + "[checking com.electriccloud.http.HttpQueueAware]"
547                 + CRLF
548                 + "[wrote RegularFileObject[C:\\commander\\pre\\ec\\ec-http\\target\\classes\\com\\electriccloud\\http\\HttpQueueAware.class]]"
549                 + CRLF + "[checking com.electriccloud.http.HttpServerAware]"
550                 + CRLF
551                 + "[wrote RegularFileObject[C:\\commander\\pre\\ec\\ec-http\\target\\classes\\com\\electriccloud\\http\\HttpServerAware.class]]"
552                 + CRLF + "[checking com.electriccloud.http.HttpUtil]"
553                 + CRLF
554                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/net/URI.class)]]"
555                 + CRLF
556                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/client/methods/HttpRequestBase.class)]]"
557                 + CRLF
558                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpcore\\4.2\\httpcore-4.2.jar(org/apache/http/message/AbstractHttpMessage.class)]]"
559                 + CRLF
560                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpcore\\4.2\\httpcore-4.2.jar(org/apache/http/HttpMessage.class)]]"
561                 + CRLF
562                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/impl/client/AbstractHttpClient.class)]]"
563                 + CRLF
564                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpcore\\4.2\\httpcore-4.2.jar(org/apache/http/annotation/GuardedBy.class)]]"
565                 + CRLF
566                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/client/ResponseHandler.class)]]"
567                 + CRLF
568                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/client/ClientProtocolException.class)]]"
569                 + CRLF
570                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpcore\\4.2\\httpcore-4.2.jar(org/apache/http/HttpEntity.class)]]"
571                 + CRLF
572                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/client/methods/HttpEntityEnclosingRequestBase.class)]]"
573                 + CRLF
574                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpcore\\4.2\\httpcore-4.2.jar(org/apache/http/entity/AbstractHttpEntity.class)]]"
575                 + CRLF
576                 + "C:\\commander\\pre\\ec\\ec-http\\src\\main\\java\\com\\electriccloud\\http\\HttpUtil.java:151: warning: [deprecation] ThreadSafeClientConnManager in org.apache.http.impl.conn.tsccm has been deprecated"
577                 + CRLF + "        ThreadSafeClientConnManager connectionManager ="
578                 + CRLF + "        ^"
579                 + CRLF
580                 + "C:\\commander\\pre\\ec\\ec-http\\src\\main\\java\\com\\electriccloud\\http\\HttpUtil.java:152: warning: [deprecation] ThreadSafeClientConnManager in org.apache.http.impl.conn.tsccm has been deprecated"
581                 + CRLF + "            new ThreadSafeClientConnManager();"
582                 + CRLF + "                ^"
583                 + CRLF
584                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/security/GeneralSecurityException.class)]]"
585                 + CRLF
586                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/javax/net/ssl/X509TrustManager.class)]]"
587                 + CRLF
588                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/security/KeyException.class)]]"
589                 + CRLF
590                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/conn/ssl/X509HostnameVerifier.class)]]"
591                 + CRLF
592                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/javax/net/ssl/SSLSocketFactory.class)]]"
593                 + CRLF
594                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/conn/scheme/HostNameResolver.class)]]"
595                 + CRLF
596                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/javax/net/ssl/HostnameVerifier.class)]]"
597                 + CRLF
598                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/conn/ssl/TrustStrategy.class)]]"
599                 + CRLF
600                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/security/KeyStore.class)]]"
601                 + CRLF
602                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/conn/scheme/SchemeRegistry.class)]]"
603                 + CRLF
604                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/conn/ClientConnectionManager.class)]]"
605                 + CRLF
606                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/client/HttpRequestRetryHandler.class)]]"
607                 + CRLF
608                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpclient\\4.2\\httpclient-4.2.jar(org/apache/http/conn/ConnectionKeepAliveStrategy.class)]]"
609                 + CRLF
610                 + "[loading ZipFileIndexFileObject[C:\\Users\\anders\\.m2\\repository\\org\\apache\\httpcomponents\\httpcore\\4.2\\httpcore-4.2.jar(org/apache/http/ParseException.class)]]"
611                 + CRLF
612                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/io/UnsupportedEncodingException.class)]]"
613                 + CRLF
614                 + "[wrote RegularFileObject[C:\\commander\\pre\\ec\\ec-http\\target\\classes\\com\\electriccloud\\http\\HttpUtil$1.class]]"
615                 + CRLF
616                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/StringBuilder.class)]]"
617                 + CRLF
618                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/AbstractStringBuilder.class)]]"
619                 + CRLF
620                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/java/lang/StringBuffer.class)]]"
621                 + CRLF
622                 + "[loading ZipFileIndexFileObject[C:\\Program Files\\Java\\jdk1.7.0_04\\lib\\ct.sym(META-INF/sym/rt.jar/javax/net/ssl/KeyManager.class)]]"
623                 + CRLF
624                 + "[wrote RegularFileObject[C:\\commander\\pre\\ec\\ec-http\\target\\classes\\com\\electriccloud\\http\\HttpUtil.class]]"
625                 + CRLF + "[total 654ms]"
626                 + CRLF + "4 warnings"
627                 + CRLF;
628         List<CompilerMessage> compilerMessages =
629                 JavacCompiler.parseModernStream(0, new BufferedReader(new StringReader(errors)));
630         assertThat("count", compilerMessages.size(), is(187));
631         List<CompilerMessage> compilerErrors = new ArrayList<>(3);
632         for (CompilerMessage message : compilerMessages) {
633             if (message.getKind() != CompilerMessage.Kind.OTHER) {
634                 compilerErrors.add(message);
635             }
636         }
637 
638         assertEquivalent(
639                 new CompilerMessage(
640                         "[options] bootstrap class path not set in conjunction with -source " + "1.6",
641                         CompilerMessage.Kind.WARNING),
642                 compilerErrors.get(0));
643         CompilerMessage error1 = compilerErrors.get(1);
644         assertThat(
645                 "file",
646                 error1.getFile(),
647                 is("C:\\commander\\pre\\ec\\ec-http\\src\\main\\java\\com\\electriccloud\\http\\HttpUtil.java"));
648         assertThat(
649                 "message",
650                 error1.getMessage(),
651                 is("[deprecation] ThreadSafeClientConnManager in org.apache.http.impl.conn.tsccm has been deprecated"));
652         assertThat("line", error1.getStartLine(), is(31));
653         assertThat("column", error1.getStartColumn(), is(38));
654         CompilerMessage error2 = compilerErrors.get(2);
655         assertThat(
656                 "file",
657                 error2.getFile(),
658                 is("C:\\commander\\pre\\ec\\ec-http\\src\\main\\java\\com\\electriccloud\\http\\HttpUtil.java"));
659         assertThat(
660                 "message",
661                 error2.getMessage(),
662                 is("[deprecation] ThreadSafeClientConnManager in org.apache.http.impl.conn.tsccm has been deprecated"));
663         assertThat("line", error2.getStartLine(), is(151));
664         assertThat("column", error2.getStartColumn(), is(8));
665         CompilerMessage error3 = compilerErrors.get(3);
666         assertThat(
667                 "file",
668                 error3.getFile(),
669                 is("C:\\commander\\pre\\ec\\ec-http\\src\\main\\java\\com\\electriccloud\\http\\HttpUtil.java"));
670         assertThat(
671                 "message",
672                 error3.getMessage(),
673                 is("[deprecation] ThreadSafeClientConnManager in org.apache.http.impl.conn.tsccm has been deprecated"));
674         assertThat("line", error3.getStartLine(), is(152));
675         assertThat("column", error3.getStartColumn(), is(16));
676     }
677 
678     @Test
679     public void testJava6Error() throws Exception {
680         String out = "Error.java:3: cannot find symbol" + EOL + "symbol  : class Properties"
681                 + EOL + "location: class Error"
682                 + EOL + "                Properties p = new Properties();"
683                 + EOL + "                ^"
684                 + EOL + "Error.java:3: cannot find symbol"
685                 + EOL + "symbol  : class Properties"
686                 + EOL + "location: class Error"
687                 + EOL + "                Properties p = new Properties();"
688                 + EOL + "                                   ^"
689                 + EOL + "2 errors";
690 
691         List<CompilerMessage> compilerErrors =
692                 JavacCompiler.parseModernStream(1, new BufferedReader(new StringReader(out)));
693 
694         assertThat(compilerErrors, notNullValue());
695 
696         CompilerMessage message1 = compilerErrors.get(0);
697 
698         assertThat(message1.isError(), is(true));
699 
700         assertThat(
701                 message1.getMessage(),
702                 is("cannot find symbol" + EOL + "symbol  : class Properties" + EOL + "location: class Error"));
703 
704         assertThat(message1.getStartColumn(), is(16));
705 
706         assertThat(message1.getEndColumn(), is(26));
707 
708         assertThat(message1.getStartLine(), is(3));
709 
710         assertThat(message1.getEndLine(), is(3));
711 
712         CompilerMessage message2 = compilerErrors.get(1);
713 
714         assertThat(message2.isError(), is(true));
715 
716         assertThat(
717                 message2.getMessage(),
718                 is("cannot find symbol" + EOL + "symbol  : class Properties" + EOL + "location: class Error"));
719 
720         assertThat(message2.getStartColumn(), is(35));
721 
722         assertThat(message2.getEndColumn(), is(48));
723 
724         assertThat(message2.getStartLine(), is(3));
725 
726         assertThat(message2.getEndLine(), is(3));
727     }
728 
729     @Test
730     public void testJava7Error() throws Exception {
731         String out =
732                 "Error.java:3: error: cannot find symbol" + EOL + "                Properties p = new Properties();"
733                         + EOL + "                ^"
734                         + EOL + "  symbol:   class Properties"
735                         + EOL + "  location: class Error"
736                         + EOL + "Error.java:3: error: cannot find symbol"
737                         + EOL + "                Properties p = new Properties();"
738                         + EOL + "                                   ^"
739                         + EOL + "  symbol:   class Properties"
740                         + EOL + "  location: class Error"
741                         + EOL + "2 errors";
742 
743         List<CompilerMessage> compilerErrors =
744                 JavacCompiler.parseModernStream(1, new BufferedReader(new StringReader(out)));
745 
746         assertThat(compilerErrors, notNullValue());
747 
748         CompilerMessage message1 = compilerErrors.get(0);
749 
750         assertThat(message1.isError(), is(true));
751 
752         assertThat(
753                 message1.getMessage(),
754                 is("error: cannot find symbol" + EOL + "  symbol:   class Properties" + EOL
755                         + "  location: class Error"));
756 
757         assertThat(message1.getStartColumn(), is(16));
758 
759         assertThat(message1.getEndColumn(), is(26));
760 
761         assertThat(message1.getStartLine(), is(3));
762 
763         assertThat(message1.getEndLine(), is(3));
764 
765         CompilerMessage message2 = compilerErrors.get(1);
766 
767         assertThat(message2.isError(), is(true));
768 
769         assertThat(
770                 message2.getMessage(),
771                 is("error: cannot find symbol" + EOL + "  symbol:   class Properties" + EOL
772                         + "  location: class Error"));
773 
774         assertThat(message2.getStartColumn(), is(35));
775 
776         assertThat(message2.getEndColumn(), is(48));
777 
778         assertThat(message2.getStartLine(), is(3));
779 
780         assertThat(message2.getEndLine(), is(3));
781     }
782 
783     @ParameterizedTest(name = "{0}")
784     @MethodSource("testBugParade_args")
785     public void testBugParade(String jdkAndLocale, String stackTraceHeader) throws Exception {
786         String stackTraceWithHeader = stackTraceHeader + stackTraceInternalCompilerError;
787 
788         List<CompilerMessage> compilerMessages =
789                 JavacCompiler.parseModernStream(4, new BufferedReader(new StringReader(stackTraceWithHeader)));
790 
791         assertThat(compilerMessages, notNullValue());
792         assertThat(compilerMessages, hasSize(1));
793 
794         String message = compilerMessages.get(0).getMessage().replaceAll(EOL, "\n");
795         // Parser retains stack trace header
796         assertThat(message, startsWith(stackTraceHeader));
797         assertThat(message, endsWith(stackTraceInternalCompilerError));
798     }
799 
800     private static final String stackTraceInternalCompilerError =
801             "\tat com.sun.tools.javac.comp.MemberEnter.baseEnv(MemberEnter.java:1388)\n"
802                     + "\tat com.sun.tools.javac.comp.MemberEnter.complete(MemberEnter.java:1046)\n"
803                     + "\tat com.sun.tools.javac.code.Symbol.complete(Symbol.java:574)\n"
804                     + "\tat com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:1037)\n"
805                     + "\tat com.sun.tools.javac.code.Symbol$ClassSymbol.flags(Symbol.java:973)\n"
806                     + "\tat com.sun.tools.javac.code.Symbol$ClassSymbol.getKind(Symbol.java:1101)\n"
807                     + "\tat com.sun.tools.javac.code.Kinds.kindName(Kinds.java:162)\n"
808                     + "\tat com.sun.tools.javac.comp.Check.duplicateError(Check.java:329)\n"
809                     + "\tat com.sun.tools.javac.comp.Check.checkUnique(Check.java:3435)\n"
810                     + "\tat com.sun.tools.javac.comp.Enter.visitTypeParameter(Enter.java:454)\n"
811                     + "\tat com.sun.tools.javac.tree.JCTree$JCTypeParameter.accept(JCTree.java:2224)\n"
812                     + "\tat com.sun.tools.javac.comp.Enter.classEnter(Enter.java:258)\n"
813                     + "\tat com.sun.tools.javac.comp.Enter.classEnter(Enter.java:272)\n"
814                     + "\tat com.sun.tools.javac.comp.Enter.visitClassDef(Enter.java:418)\n"
815                     + "\tat com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)\n"
816                     + "\tat com.sun.tools.javac.comp.Enter.classEnter(Enter.java:258)\n"
817                     + "\tat com.sun.tools.javac.comp.Enter.classEnter(Enter.java:272)\n"
818                     + "\tat com.sun.tools.javac.comp.Enter.visitTopLevel(Enter.java:334)\n"
819                     + "\tat com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:518)\n"
820                     + "\tat com.sun.tools.javac.comp.Enter.classEnter(Enter.java:258)\n"
821                     + "\tat com.sun.tools.javac.comp.Enter.classEnter(Enter.java:272)\n"
822                     + "\tat com.sun.tools.javac.comp.Enter.complete(Enter.java:486)\n"
823                     + "\tat com.sun.tools.javac.comp.Enter.main(Enter.java:471)\n"
824                     + "\tat com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:982)\n"
825                     + "\tat com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:857)\n"
826                     + "\tat com.sun.tools.javac.main.Main.compile(Main.java:523)\n"
827                     + "\tat com.sun.tools.javac.main.Main.compile(Main.java:381)\n"
828                     + "\tat com.sun.tools.javac.main.Main.compile(Main.java:370)\n"
829                     + "\tat com.sun.tools.javac.main.Main.compile(Main.java:361)\n"
830                     + "\tat com.sun.tools.javac.Main.compile(Main.java:56)\n"
831                     + "\tat com.sun.tools.javac.Main.main(Main.java:42)\n";
832 
833     private static Stream<Arguments> testBugParade_args() {
834         return Stream.of(
835                 Arguments.of(
836                         "JDK 8 English",
837                         "An exception has occurred in the compiler ({0}). Please file a bug at the Java Developer Connection (http://java.sun.com/webapps/bugreport)  after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report.  Thank you.\n"),
838                 Arguments.of(
839                         "JDK 8 Japanese",
840                         "コンパイラで例外が発生しました({0})。Bug Paradeで重複がないかをご確認のうえ、Java Developer Connection (http://java.sun.com/webapps/bugreport)でbugの登録をお願いいたします。レポートには、そのプログラムと下記の診断内容を含めてください。ご協力ありがとうございます。\n"),
841                 Arguments.of(
842                         "JDK 8 Chinese",
843                         "编译器 ({0}) 中出现异常错误。 如果在 Bug Parade 中没有找到该错误, 请在 Java Developer Connection (http://java.sun.com/webapps/bugreport) 中建立 Bug。请在报告中附上您的程序和以下诊断信息。谢谢。\n"),
844                 Arguments.of(
845                         "JDK 21 English",
846                         "An exception has occurred in the compiler ({0}). Please file a bug against the Java compiler via the Java bug reporting page (https://bugreport.java.com) after checking the Bug Database (https://bugs.java.com) for duplicates. Include your program, the following diagnostic, and the parameters passed to the Java compiler in your report. Thank you.\n"),
847                 Arguments.of(
848                         "JDK 21 Japanese",
849                         "コンパイラで例外が発生しました({0})。バグ・データベース(https://bugs.java.com)で重複がないかをご確認のうえ、Javaのバグ・レポート・ページ(https://bugreport.java.com)から、Javaコンパイラに対するバグの登録をお願いいたします。レポートには、該当のプログラム、次の診断内容、およびJavaコンパイラに渡されたパラメータをご入力ください。ご協力ありがとうございます。\n"),
850                 Arguments.of(
851                         "JDK 21 Chinese",
852                         "编译器 ({0}) 中出现异常错误。如果在 Bug Database (https://bugs.java.com) 中没有找到有关该错误的 Java 编译器 Bug,请通过 Java Bug 报告页 (https://bugreport.java.com) 提交 Java 编译器 Bug。请在报告中附上您的程序、以下诊断信息以及传递到 Java 编译器的参数。谢谢。\n"),
853                 Arguments.of(
854                         "JDK 21 German",
855                         "Im Compiler ({0}) ist eine Ausnahme aufgetreten. Erstellen Sie auf der Java-Seite zum Melden von Bugs (https://bugreport.java.com) einen Bugbericht, nachdem Sie die Bugdatenbank (https://bugs.java.com) auf Duplikate geprüft haben. Geben Sie in Ihrem Bericht Ihr Programm, die folgende Diagnose und die Parameter an, die Sie dem Java-Compiler übergeben haben. Vielen Dank.\n"));
856     }
857 
858     @Test
859     public void testNonAnchoredWarning() throws IOException {
860         final String error = "warning: [options] bootstrap class path not set in conjunction with -source 1.6" + EOL
861                 + "1 warning" + EOL;
862 
863         final List<CompilerMessage> compilerErrors =
864                 JavacCompiler.parseModernStream(0, new BufferedReader(new StringReader(error)));
865 
866         assertThat(compilerErrors, notNullValue());
867         assertThat(compilerErrors.size(), is(1));
868         assertEquivalent(
869                 new CompilerMessage(
870                         "[options] bootstrap class path not set in conjunction with -source 1.6",
871                         CompilerMessage.Kind.WARNING),
872                 compilerErrors.get(0));
873     }
874 
875     @Test
876     public void testAnchoredWarning() throws IOException {
877         final String error = "C:\\repo\\src\\it\\includes-output-when-compiler-forked\\src\\main"
878                 + "\\java\\MyClass.java:23: warning: [divzero] division by zero"
879                 + EOL + "      System.out.println(1/0);"
880                 + EOL + "                           ^"
881                 + EOL + "1 warnings"
882                 + EOL;
883 
884         final List<CompilerMessage> compilerErrors =
885                 JavacCompiler.parseModernStream(0, new BufferedReader(new StringReader(error)));
886 
887         assertThat(compilerErrors, notNullValue());
888         assertThat(compilerErrors.size(), is(1));
889         assertEquivalent(
890                 new CompilerMessage(
891                         "C:\\repo\\src\\it\\includes-output-when-compiler-forked\\src\\main\\java\\MyClass" + ".java",
892                         CompilerMessage.Kind.WARNING,
893                         23,
894                         27,
895                         23,
896                         30,
897                         "[divzero] division by zero"),
898                 compilerErrors.get(0));
899     }
900 
901     @Test
902     public void testMixedWarnings() throws IOException {
903         final String error = "warning: [options] bootstrap class path not set in conjunction with -source 1.6" + EOL
904                 + "C:\\repo\\src\\it\\includes-output-when-compiler-forked\\src\\main\\java"
905                 + "\\MyClass.java:23: warning: [divzero] division by zero"
906                 + EOL + "      System.out.println(1/0);"
907                 + EOL + "                           ^"
908                 + EOL + "2 warnings";
909 
910         final List<CompilerMessage> compilerErrors =
911                 JavacCompiler.parseModernStream(0, new BufferedReader(new StringReader(error)));
912 
913         assertThat(compilerErrors, notNullValue());
914         assertThat(compilerErrors.size(), is(2));
915         assertEquivalent(
916                 new CompilerMessage(
917                         "[options] bootstrap class path not set in conjunction with -source 1.6",
918                         CompilerMessage.Kind.WARNING),
919                 compilerErrors.get(0));
920         assertEquivalent(
921                 new CompilerMessage(
922                         "C:\\repo\\src\\it\\includes-output-when-compiler-forked\\src\\main\\java\\MyClass" + ".java",
923                         CompilerMessage.Kind.WARNING,
924                         23,
925                         27,
926                         23,
927                         30,
928                         "[divzero] division by zero"),
929                 compilerErrors.get(1));
930     }
931 
932     @Test
933     public void testIssue37() throws IOException {
934         String error =
935                 "warning: [path] bad path element \"d:\\maven_repo\\.m2\\repository\\org\\ow2\\asm\\asm-xml\\5.0.3\\asm-5.0.3.jar\": no such file or directory"
936                         + EOL
937                         + "warning: [path] bad path element \"d:\\maven_repo\\.m2\\repository\\org\\ow2\\asm\\asm-xml\\5.0.3\\asm-util-5.0.3.jar\": no such file or directory"
938                         + EOL + "warning: [options] bootstrap class path not set in conjunction with -source 1.7"
939                         + EOL + "3 warnings"
940                         + EOL
941                         + "An exception has occurred in the compiler (9). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you."
942                         + EOL + "java.lang.NullPointerException"
943                         + EOL + "\tat jdk.zipfs/jdk.nio.zipfs.JarFileSystem.getVersionMap(JarFileSystem.java:137)"
944                         + EOL
945                         + "\tat jdk.zipfs/jdk.nio.zipfs.JarFileSystem.createVersionedLinks(JarFileSystem.java:112)"
946                         + EOL + "\tat jdk.zipfs/jdk.nio.zipfs.JarFileSystem.<init>(JarFileSystem.java:85)"
947                         + EOL
948                         + "\tat jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.newFileSystem(ZipFileSystemProvider.java:134)"
949                         + EOL
950                         + "\tat jdk.compiler/com.sun.tools.javac.file.JavacFileManager$ArchiveContainer.<init>(JavacFileManager.java:517)"
951                         + EOL
952                         + "\tat jdk.compiler/com.sun.tools.javac.file.JavacFileManager.getContainer(JavacFileManager.java:319)"
953                         + EOL
954                         + "\tat jdk.compiler/com.sun.tools.javac.file.JavacFileManager.list(JavacFileManager.java:715)"
955                         + EOL + "\tat jdk.compiler/com.sun.tools.javac.code.ClassFinder.list(ClassFinder.java:722)"
956                         + EOL
957                         + "\tat jdk.compiler/com.sun.tools.javac.code.ClassFinder.scanUserPaths(ClassFinder.java:655)"
958                         + EOL + "\tat jdk.compiler/com.sun.tools.javac.code.ClassFinder.fillIn(ClassFinder.java:526)"
959                         + EOL + "\tat jdk.compiler/com.sun.tools.javac.code.ClassFinder.complete(ClassFinder.java:293)"
960                         + EOL + "\tat jdk.compiler/com.sun.tools.javac.code.Symbol.complete(Symbol.java:633)"
961                         + EOL
962                         + "\tat jdk.compiler/com.sun.tools.javac.code.Symbol$PackageSymbol.members(Symbol.java:1120)"
963                         + EOL + "\tat jdk.compiler/com.sun.tools.javac.code.Symtab.listPackageModules(Symtab.java:810)"
964                         + EOL + "\tat jdk.compiler/com.sun.tools.javac.comp.Enter.visitTopLevel(Enter.java:344)"
965                         + EOL
966                         + "\tat jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:529)"
967                         + EOL + "\tat jdk.compiler/com.sun.tools.javac.comp.Enter.classEnter(Enter.java:285)"
968                         + EOL + "\tat jdk.compiler/com.sun.tools.javac.comp.Enter.classEnter(Enter.java:300)"
969                         + EOL + "\tat jdk.compiler/com.sun.tools.javac.comp.Enter.complete(Enter.java:570)"
970                         + EOL + "\tat jdk.compiler/com.sun.tools.javac.comp.Enter.main(Enter.java:554)"
971                         + EOL
972                         + "\tat jdk.compiler/com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:1052)"
973                         + EOL + "\tat jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:923)"
974                         + EOL + "\tat jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:302)"
975                         + EOL + "\tat jdk.compiler/com.sun.tools.javac.main.Main.compile(Main.java:162)"
976                         + EOL + "\tat jdk.compiler/com.sun.tools.javac.Main.compile(Main.java:57)"
977                         + EOL + "\tat jdk.compiler/com.sun.tools.javac.Main.main(Main.java:43)";
978 
979         List<CompilerMessage> compilerErrors =
980                 JavacCompiler.parseModernStream(0, new BufferedReader(new StringReader(error)));
981 
982         assertThat(compilerErrors, notNullValue());
983         assertThat(compilerErrors.size(), is(4));
984 
985         assertEquivalent(
986                 new CompilerMessage(
987                         "[path] bad path element \"d:\\maven_repo\\"
988                                 + ".m2\\repository\\org\\ow2\\asm\\asm-xml\\5.0.3\\asm-5.0.3.jar\": no such file or directory",
989                         CompilerMessage.Kind.WARNING),
990                 compilerErrors.get(0));
991         assertEquivalent(
992                 new CompilerMessage(
993                         "warning: [path] bad path element \"d:\\maven_repo\\.m2\\repository\\org\\ow2\\asm\\asm-xml\\5.0.3\\asm-util-5.0.3.jar\": no such file or directory",
994                         CompilerMessage.Kind.WARNING),
995                 compilerErrors.get(1));
996         assertEquivalent(
997                 new CompilerMessage(
998                         "[options] bootstrap class path not set in conjunction with -source 1.7",
999                         CompilerMessage.Kind.WARNING),
1000                 compilerErrors.get(2));
1001 
1002         CompilerMessage finalMessage = compilerErrors.get(3);
1003         assertThat(finalMessage.getKind(), is(CompilerMessage.Kind.ERROR));
1004         assertThat(
1005                 "Starts correctly", finalMessage.getMessage(), startsWith("An exception has occurred in the compiler"));
1006         assertThat(
1007                 "continues through end of output",
1008                 finalMessage.getMessage(),
1009                 endsWith("\tat jdk.compiler/com.sun" + ".tools.javac.Main.main(Main.java:43)" + EOL));
1010     }
1011 
1012     @Test
1013     public void testJvmBootLayerInitializationError() throws Exception {
1014         String out = "Error occurred during initialization of boot layer" + EOL
1015                 + "java.lang.module.FindException: Module java.xml.bind not found";
1016 
1017         List<CompilerMessage> compilerErrors =
1018                 JavacCompiler.parseModernStream(1, new BufferedReader(new StringReader(out)));
1019 
1020         assertThat(compilerErrors, notNullValue());
1021         assertThat(compilerErrors.size(), is(1));
1022         assertThat(compilerErrors.get(0).getKind(), is(CompilerMessage.Kind.ERROR));
1023     }
1024 
1025     @Test
1026     public void testJvmInitializationError() throws Exception {
1027         String out = "Error occurred during initialization of VM" + EOL
1028                 + "Initial heap size set to a larger value than the maximum heap size";
1029 
1030         List<CompilerMessage> compilerErrors =
1031                 JavacCompiler.parseModernStream(1, new BufferedReader(new StringReader(out)));
1032 
1033         assertThat(compilerErrors, notNullValue());
1034         assertThat(compilerErrors.size(), is(1));
1035         assertThat(compilerErrors.get(0).getKind(), is(CompilerMessage.Kind.ERROR));
1036     }
1037 
1038     @Test
1039     public void testBadSourceFileError() throws Exception {
1040         String out = "/MTOOLCHAINS-19/src/main/java/ch/pecunifex/x/Cls1.java:12: error: cannot access Cls2\n"
1041                 + "    Cls2 tvar;\n"
1042                 + "    ^\n"
1043                 + "  bad source file: /MTOOLCHAINS-19/src/main/java/ch/pecunifex/x/Cls2.java\n"
1044                 + "    file does not contain class ch.pecunifex.x.Cls2\n"
1045                 + "    Please remove or make sure it appears in the correct subdirectory of the sourcepath.";
1046 
1047         List<CompilerMessage> compilerErrors =
1048                 JavacCompiler.parseModernStream(1, new BufferedReader(new StringReader(out)));
1049 
1050         assertThat(compilerErrors, notNullValue());
1051 
1052         assertThat(compilerErrors.size(), is(1));
1053 
1054         CompilerMessage message = compilerErrors.get(0);
1055         validateBadSourceFile(message);
1056     }
1057 
1058     @Test
1059     public void testWarningFollowedByBadSourceFileError() throws Exception {
1060         String out =
1061                 "/MTOOLCHAINS-19/src/main/java/ch/pecunifex/x/Cls1.java:3: warning: FontDesignMetrics is internal proprietary API and may be removed in a future release\n"
1062                         + "import sun.font.FontDesignMetrics;\n"
1063                         + "               ^\n"
1064                         + "/MTOOLCHAINS-19/src/main/java/ch/pecunifex/x/Cls1.java:12: error: cannot access Cls2\n"
1065                         + "    Cls2 tvar;\n"
1066                         + "    ^\n"
1067                         + "  bad source file: /MTOOLCHAINS-19/src/main/java/ch/pecunifex/x/Cls2.java\n"
1068                         + "    file does not contain class ch.pecunifex.x.Cls2\n"
1069                         + "    Please remove or make sure it appears in the correct subdirectory of the sourcepath.";
1070 
1071         List<CompilerMessage> compilerErrors =
1072                 JavacCompiler.parseModernStream(1, new BufferedReader(new StringReader(out)));
1073 
1074         assertThat(compilerErrors, notNullValue());
1075 
1076         assertThat(compilerErrors, hasSize(2));
1077 
1078         CompilerMessage firstMessage = compilerErrors.get(0);
1079         assertThat("Is a Warning", firstMessage.getKind(), is(CompilerMessage.Kind.WARNING));
1080         assertThat(
1081                 "On Correct File",
1082                 firstMessage.getFile(),
1083                 is("/MTOOLCHAINS-19/src/main/java/ch/pecunifex/x/Cls1.java"));
1084         assertThat(
1085                 "Internal API Warning",
1086                 firstMessage.getMessage(),
1087                 is("FontDesignMetrics is internal proprietary API and may be removed in a future release"));
1088 
1089         CompilerMessage secondMessage = compilerErrors.get(1);
1090         validateBadSourceFile(secondMessage);
1091     }
1092 
1093     private void validateBadSourceFile(CompilerMessage message) {
1094         assertThat("Is an Error", message.getKind(), is(CompilerMessage.Kind.ERROR));
1095         assertThat("On Correct File", message.getFile(), is("/MTOOLCHAINS-19/src/main/java/ch/pecunifex/x/Cls1.java"));
1096         assertThat("Message starts with access Error", message.getMessage(), startsWith("error: cannot access Cls2"));
1097     }
1098 
1099     private static void assertEquivalent(CompilerMessage expected, CompilerMessage actual) {
1100         assertThat("Message did not match", actual.getMessage(), is(expected.getMessage()));
1101         assertThat("Kind did not match", actual.getKind(), is(expected.getKind()));
1102         assertThat("File did not match", actual.getFile(), is(expected.getFile()));
1103         assertThat("Start line did not match", actual.getStartLine(), is(expected.getStartLine()));
1104         assertThat("Start column did not match", actual.getStartColumn(), is(expected.getStartColumn()));
1105         assertThat("End line did not match", actual.getEndLine(), is(expected.getEndLine()));
1106         assertThat("End column did not match", actual.getEndColumn(), is(expected.getEndColumn()));
1107     }
1108 }