test/tools/javac/processing/errors/TestReturnCode.java

Tue, 25 May 2010 15:54:51 -0700

author
ohair
date
Tue, 25 May 2010 15:54:51 -0700
changeset 554
9d9f26857129
parent 1
9a66ca7c79fa
child 699
d2aaaec153e8
permissions
-rw-r--r--

6943119: Rebrand source copyright notices
Reviewed-by: darcy

     1 /*
     2  * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  */
    24 /*
    25  * @test
    26  * @bug 6403468
    27  * @summary Test that an erroneous return code results from raising an error.
    28  * @author  Joseph D. Darcy
    29  * @compile TestReturnCode.java
    30  *
    31  * @compile      -processor TestReturnCode -proc:only                                                                   Foo.java
    32  * @compile/fail -processor TestReturnCode -proc:only                                                    -AErrorOnFirst Foo.java
    33  * @compile/fail -processor TestReturnCode -proc:only                                      -AErrorOnLast                Foo.java
    34  * @compile/fail -processor TestReturnCode -proc:only                                      -AErrorOnLast -AErrorOnFirst Foo.java
    35  * @compile/fail -processor TestReturnCode -proc:only                   -AExceptionOnFirst                              Foo.java
    36  * @compile/fail -processor TestReturnCode -proc:only                   -AExceptionOnFirst               -AErrorOnFirst Foo.java
    37  * @compile/fail -processor TestReturnCode -proc:only                   -AExceptionOnFirst -AErrorOnLast                Foo.java
    38  * @compile/fail -processor TestReturnCode -proc:only                   -AExceptionOnFirst -AErrorOnLast -AErrorOnFirst Foo.java
    39  * @compile/fail -processor TestReturnCode -proc:only -AExceptionOnLast                                                 Foo.java
    40  * @compile/fail -processor TestReturnCode -proc:only -AExceptionOnLast                                  -AErrorOnFirst Foo.java
    41  * @compile/fail -processor TestReturnCode -proc:only -AExceptionOnLast                    -AErrorOnLast                Foo.java
    42  * @compile/fail -processor TestReturnCode -proc:only -AExceptionOnLast                    -AErrorOnLast -AErrorOnFirst Foo.java
    43  * @compile/fail -processor TestReturnCode -proc:only -AExceptionOnLast -AExceptionOnFirst                              Foo.java
    44  * @compile/fail -processor TestReturnCode -proc:only -AExceptionOnLast -AExceptionOnFirst               -AErrorOnFirst Foo.java
    45  * @compile/fail -processor TestReturnCode -proc:only -AExceptionOnLast -AExceptionOnFirst -AErrorOnLast                Foo.java
    46  * @compile/fail -processor TestReturnCode -proc:only -AExceptionOnLast -AExceptionOnFirst -AErrorOnLast -AErrorOnFirst Foo.java
    47  */
    49 import java.util.Set;
    50 import java.util.HashSet;
    51 import java.util.Arrays;
    52 import javax.annotation.processing.*;
    53 import javax.lang.model.SourceVersion;
    54 import javax.lang.model.element.*;
    55 import javax.lang.model.util.*;
    56 import static javax.tools.Diagnostic.Kind.*;
    59 /**
    60  * This processor raises errors or throws exceptions on different
    61  * rounds to allow the return code to be test.
    62  */
    63 @SupportedAnnotationTypes("*")
    64 @SupportedOptions({"ErrorOnFirst",
    65                    "ErrorOnLast",
    66                    "ExceptionOnFirst",
    67                    "ExceptionOnLast"})
    68 public class TestReturnCode extends AbstractProcessor {
    70     private boolean errorOnFirst;
    71     private boolean errorOnLast;
    72     private boolean exceptionOnFirst;
    73     private boolean exceptionOnLast;
    75     private Messager messager;
    77     public boolean process(Set<? extends TypeElement> annotations,
    78                            RoundEnvironment roundEnv) {
    79         if (!roundEnv.processingOver()) {
    80             System.out.format("Variables: %b\t%b\t%b\t%b%n",
    81                               errorOnFirst,
    82                               errorOnLast,
    83                               exceptionOnFirst,
    84                               exceptionOnLast);
    85             if (errorOnFirst)
    86                 messager.printMessage(ERROR, "Error on first round.");
    87             if (exceptionOnFirst)
    88                 throw new RuntimeException("Exception on first round.");
    89         } else {
    90             if (errorOnLast)
    91                 messager.printMessage(ERROR, "Error on last round.");
    92             if (exceptionOnLast)
    93                 throw new RuntimeException("Exception on last round.");
    94         }
    95         return true;
    96     }
    98     @Override
    99     public void init(ProcessingEnvironment processingEnv) {
   100         super.init(processingEnv);
   101         Set<String> keySet = processingEnv.getOptions().keySet();
   102         errorOnFirst      = keySet.contains("ErrorOnFirst");
   103         errorOnLast     = keySet.contains("ErrorOnLast");
   104         exceptionOnFirst  = keySet.contains("ExceptionOnFirst");
   105         exceptionOnLast = keySet.contains("ExceptionOnLast");
   106         messager = processingEnv.getMessager();
   107     }
   109     @Override
   110     public SourceVersion getSupportedSourceVersion() {
   111         return SourceVersion.latest();
   112     }
   113 }

mercurial