test/tools/javac/processing/model/type/MirroredTypeEx/OverEager.java

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

author
ohair
date
Tue, 25 May 2010 15:54:51 -0700
changeset 554
9d9f26857129
parent 495
fe17a9dbef03
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     6362178
    27  * @summary MirroredType[s]Exception shouldn't be created too eagerly
    28  * @author  Scott Seligman
    29  * @compile -g OverEager.java
    30  * @compile -processor OverEager -proc:only OverEager.java
    31  */
    33 import java.util.Set;
    34 import javax.annotation.processing.*;
    35 import javax.lang.model.SourceVersion;
    36 import javax.lang.model.element.*;
    37 import javax.lang.model.type.*;
    38 import javax.lang.model.util.*;
    39 import static javax.lang.model.util.ElementFilter.*;
    41 @SupportedAnnotationTypes("IAm")
    42 @IAm(OverEager.class)
    43 public class OverEager extends AbstractProcessor {
    45     Elements elements;
    46     Types types;
    48     public void init(ProcessingEnvironment penv) {
    49         super.init(penv);
    50         elements = penv.getElementUtils();
    51         types =  penv.getTypeUtils();
    52     }
    54     public boolean process(Set<? extends TypeElement> annoTypes,
    55                            RoundEnvironment round) {
    56         if (!round.processingOver())
    57             doit(annoTypes, round);
    58         return true;
    59     }
    61     @Override
    62     public SourceVersion getSupportedSourceVersion() {
    63         return SourceVersion.latest();
    64     }
    66     private void doit(Set<? extends TypeElement> annoTypes,
    67                       RoundEnvironment round) {
    68         for (TypeElement t : typesIn(round.getRootElements())) {
    69             IAm anno = t.getAnnotation(IAm.class);
    70             if (anno != null)
    71                 checkAnno(anno);
    72         }
    73     }
    75     private void checkAnno(IAm anno) {
    76         try {
    77             anno.value();
    78             throw new AssertionError();
    79         } catch (MirroredTypeException e) {
    80             System.out.println("Looking for checkAnno in this stack trace:");
    81             e.printStackTrace();
    82             for (StackTraceElement frame : e.getStackTrace()) {
    83                 if (frame.getMethodName() == "checkAnno")
    84                     return;
    85             }
    86             throw new AssertionError();
    87         }
    88     }
    89 }
    91 @interface IAm {
    92     Class<?> value();
    93 }

mercurial