TestFatalityOfParseErrors.java revision 1465:b52a38d4536c
1205147Sedwin/*
2205147Sedwin * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
3263227Sjmmv * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4263227Sjmmv *
5263227Sjmmv * This code is free software; you can redistribute it and/or modify it
6263227Sjmmv * under the terms of the GNU General Public License version 2 only, as
7263227Sjmmv * published by the Free Software Foundation.
8263227Sjmmv *
9263227Sjmmv * This code is distributed in the hope that it will be useful, but WITHOUT
10263227Sjmmv * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11263227Sjmmv * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12263227Sjmmv * version 2 for more details (a copy is included in the LICENSE file that
13263227Sjmmv * accompanied this code).
14263227Sjmmv *
15263227Sjmmv * You should have received a copy of the GNU General Public License version
16263227Sjmmv * 2 along with this work; if not, write to the Free Software Foundation,
17263227Sjmmv * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18263227Sjmmv *
19263227Sjmmv * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20263227Sjmmv * or visit www.oracle.com if you need additional information or have any
21263227Sjmmv * questions.
22263227Sjmmv */
23263227Sjmmv
24263227Sjmmv/*
25263227Sjmmv * @test
26263227Sjmmv * @bug 6403459
27263227Sjmmv * @summary Test that generating programs with syntax errors is a fatal condition
28263227Sjmmv * @author  Joseph D. Darcy
29263227Sjmmv * @library /tools/javac/lib
30263227Sjmmv * @build JavacTestingAbstractProcessor
31263227Sjmmv * @compile TestReturnCode.java
32263227Sjmmv * @compile TestFatalityOfParseErrors.java
33263227Sjmmv * @compile/fail -XprintRounds -processor TestFatalityOfParseErrors -proc:only TestFatalityOfParseErrors.java
34263227Sjmmv */
35263227Sjmmv
36263227Sjmmvimport java.util.Set;
37263227Sjmmvimport javax.annotation.processing.*;
38263227Sjmmvimport javax.lang.model.SourceVersion;
39263227Sjmmvimport static javax.lang.model.SourceVersion.*;
40263227Sjmmvimport javax.lang.model.element.*;
41263227Sjmmvimport javax.lang.model.util.*;
42263227Sjmmvimport static javax.tools.Diagnostic.Kind.*;
43263227Sjmmv
44263227Sjmmvimport java.io.PrintWriter;
45263227Sjmmvimport java.io.IOException;
46263227Sjmmv
47263227Sjmmv/**
48263227Sjmmv * Write out an incomplete source file and observe that the next round
49263227Sjmmv * is marked as an error.
50263227Sjmmv */
51263227Sjmmvpublic class TestFatalityOfParseErrors extends JavacTestingAbstractProcessor {
52263227Sjmmv    int round = 0;
53263227Sjmmv
54263227Sjmmv    public boolean process(Set<? extends TypeElement> annotations,
55263227Sjmmv                           RoundEnvironment roundEnvironment) {
56263227Sjmmv        try {
57263227Sjmmv            PrintWriter pw = null;
58263227Sjmmv            round++;
59263227Sjmmv
60263227Sjmmv            switch (round) {
61263227Sjmmv            case 1:
62263227Sjmmv                pw = new PrintWriter(filer.createSourceFile("SyntaxError").openWriter());
63263227Sjmmv                pw.println("class SyntaxError {");
64263227Sjmmv                pw.close();
65263227Sjmmv                break;
66263227Sjmmv
67263227Sjmmv            case 2:
68263227Sjmmv                pw = new PrintWriter(filer.createSourceFile("SimpleClass").openWriter());
69263227Sjmmv                pw.println("class SimpleClass {}");
70263227Sjmmv                pw.close();
71263227Sjmmv
72263227Sjmmv                if (!roundEnvironment.errorRaised() || !roundEnvironment.processingOver() ) {
73263227Sjmmv                    System.err.println(roundEnvironment);
74263227Sjmmv                    throw new RuntimeException("Second round not erroneous as expected.");
75263227Sjmmv                }
76263227Sjmmv                if (!roundEnvironment.getRootElements().isEmpty()) {
77263227Sjmmv                    System.err.println(roundEnvironment);
78263227Sjmmv                    throw new RuntimeException("Root elements not empty as expected.");
79263227Sjmmv                }
80263227Sjmmv                break;
81263227Sjmmv
82263227Sjmmv            default:
83263227Sjmmv                throw new RuntimeException("Unexpected round number " + round);
84263227Sjmmv            }
85263227Sjmmv        } catch (IOException ioException) {
86263227Sjmmv            throw new RuntimeException(ioException);
87263227Sjmmv        }
88263227Sjmmv        return true;
89263227Sjmmv    }
90263227Sjmmv}
91263227Sjmmv