test/tools/javac/processing/model/element/TypeParamBounds.java

Wed, 27 Apr 2016 01:34:52 +0800

author
aoqi
date
Wed, 27 Apr 2016 01:34:52 +0800
changeset 0
959103a6100f
child 2525
2eb010b6cb22
permissions
-rw-r--r--

Initial load
http://hg.openjdk.java.net/jdk8u/jdk8u/langtools/
changeset: 2573:53ca196be1ae
tag: jdk8u25-b17

     1 /*
     2  * Copyright (c) 2006, 2010, 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     6423972
    27  * @summary Tests TypeParameter.getBounds.
    28  * @author  Scott Seligman
    29  * @library /tools/javac/lib
    30  * @build   JavacTestingAbstractProcessor TypeParamBounds
    31  * @compile -processor TypeParamBounds -proc:only TypeParamBounds.java
    32  */
    34 import java.util.HashMap;
    35 import java.util.List;
    36 import java.util.Map;
    37 import java.util.Set;
    38 import javax.annotation.processing.*;
    39 import javax.lang.model.SourceVersion;
    40 import javax.lang.model.element.*;
    41 import javax.lang.model.type.*;
    42 import javax.lang.model.util.*;
    44 public class TypeParamBounds extends JavacTestingAbstractProcessor {
    45     public boolean process(Set<? extends TypeElement> annoTypes,
    46                            RoundEnvironment round) {
    47         if (!round.processingOver())
    48             doit(annoTypes, round);
    49         return true;
    50     }
    52     private void doit(Set<? extends TypeElement> annoTypes,
    53                       RoundEnvironment round) {
    54         TypeElement gen = elements.getTypeElement("TypeParamBounds.Gen");
    56         // For each type parameter of Gen, compare its bounds with the
    57         // bounds that are expected.
    58         //
    59         for (TypeParameterElement tparam : gen.getTypeParameters()) {
    60             System.out.println(tparam);
    61             List<? extends TypeMirror> bounds = tparam.getBounds();
    62             String[] expected = Gen.boundNames.get(tparam + "");
    64             if (bounds.size() != expected.length)
    65                 throw new AssertionError();
    66             int i = 0;
    67             for (TypeMirror bound : bounds) {
    68                 Name got = types.asElement(bound).getSimpleName();
    69                 String shoulda = expected[i++];
    70                 System.out.println("  " + got);
    71                 if (!got.contentEquals(shoulda))
    72                     throw new AssertionError(shoulda);
    73             }
    74         }
    75     }
    78     // Fodder for the processor
    79     static class Gen<T, U extends Object, V extends Number, W extends U,
    80                      X extends Runnable, Y extends CharSequence & Runnable,
    81                      Z extends Object & Runnable> {
    83         // The names of the bounds of each type parameter of Gen.
    84         static Map<String, String[]> boundNames =
    85                 new HashMap<String, String[]>();
    87         static {
    88             boundNames.put("T", new String[] {"Object"});
    89             boundNames.put("U", new String[] {"Object"});
    90             boundNames.put("V", new String[] {"Number"});
    91             boundNames.put("W", new String[] {"U"});
    92             boundNames.put("X", new String[] {"Runnable"});
    93             boundNames.put("Y", new String[] {"CharSequence", "Runnable"});
    94             boundNames.put("Z", new String[] {"Object", "Runnable"});
    95         }
    96     }
    97 }

mercurial