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